HTTP - Cache 缓存
HTTP 通常用于分布式信息系统,其中可以通过使用响应缓存来提高性能。 HTTP/1.1 协议包含许多旨在使缓存发挥作用的元素。
HTTP/1.1 中缓存的目标是消除在许多情况下发送请求的需要,以及消除在许多其他情况下发送完整响应的需要。
HTTP/1.1 中的基本缓存机制是对缓存的隐式指令,其中服务器指定过期时间和验证器。 为此,我们使用 Cache-Control 标头。
Cache-Control标头允许客户端或服务器在请求或响应中传输各种指令。 这些指令通常会覆盖默认的缓存算法。 缓存指令在逗号分隔的列表中指定。 例如:
Cache-control: no-cache
客户端可以在其 HTTP 请求中使用以下缓存请求指令:
S.N. | 缓存请求指令和描述 |
---|---|
1 | no-cache 在未成功与源服务器重新验证的情况下,缓存不得使用响应来满足后续请求。 |
2 | no-store 缓存不应存储有关客户端请求或服务器响应的任何内容。 |
3 | max-age = seconds 表示客户端愿意接受年龄不大于指定时间(以秒为单位)的响应。 |
4 | max-stale [ = seconds ] 表示客户端愿意接受超过过期时间的响应。 如果指定秒数,则过期时间不得超过该时间。 |
5 | min-fresh = seconds 表示客户端愿意接受新鲜度生命周期不小于其当前年龄加上指定时间(以秒为单位)的响应。 |
6 | no-transform 不转换实体主体。 |
7 | only-if-cached 不检索新数据。 缓存只能发送位于缓存中的文档,并且不应联系源服务器以查看是否存在较新的副本。 |
服务器可以在其 HTTP 响应中使用以下缓存响应指令:
S.N. | 缓存响应指令和描述 |
---|---|
1 | public 表示响应可以被任何缓存缓存。 |
2 | private 指示全部或部分响应消息适用于单个用户,并且不得由共享缓存进行缓存。 |
3 | no-cache 在未成功与源服务器重新验证的情况下,缓存不得使用响应来满足后续请求。 |
4 | no-store 缓存不应存储有关客户端请求或服务器响应的任何内容。 |
5 | no-transform 不转换实体主体。 |
6 | must-revalidate 缓存在使用之前必须验证过时文档的状态,并且不应使用过期的文档。 |
7 | proxy-revalidate proxy-revalidate 指令与 Must-revalidate 指令具有相同的含义,只是它不适用于非共享用户代理缓存。 |
8 | max-age = seconds 表示客户端愿意接受年龄不大于指定时间(以秒为单位)的响应。 |
9 | s-maxage = seconds 此指令指定的最大期限会覆盖 max-age 指令或 Expires 标头指定的最大期限。 s-maxage 指令始终被私有缓存忽略。 |