HTTP - 缓存



HTTP 通常用于分布式信息系统,通过使用响应缓存可以提高性能。HTTP/1.1 协议包含许多旨在使缓存工作的元素。

HTTP/1.1 中缓存的目标是在许多情况下无需发送请求,在许多其他情况下无需发送完整响应。

HTTP/1.1 中的基本缓存机制是对缓存的隐式指令,其中服务器指定过期时间和验证器。为此,我们使用Cache-Control 头。

Cache-Control 头允许客户端或服务器在请求或响应中传输各种指令。这些指令通常会覆盖默认的缓存算法。缓存指令以逗号分隔的列表指定。例如:

Cache-control: no-cache

客户端在其 HTTP 请求中可以使用以下缓存请求指令:

序号 缓存请求指令及说明
1 no-cache

缓存不能使用响应来满足后续请求,除非与原始服务器成功重新验证。

2 no-store

缓存不应存储关于客户端请求或服务器响应的任何信息。

3 max-age = 秒

指示客户端愿意接受年龄不超过指定秒数的响应。

4 max-stale [ = 秒 ]

指示客户端愿意接受已超过其过期时间的响应。如果给出了秒数,则其过期时间不能超过该时间。

5 min-fresh = 秒

指示客户端愿意接受新鲜度寿命不小于其当前年龄加上指定秒数的响应。

6 no-transform

不转换实体主体。

7 only-if-cached

不检索新数据。缓存只有在缓存中存在文档时才能发送文档,并且不应联系原始服务器查看是否存在更新的副本。

服务器在其 HTTP 响应中可以使用以下缓存响应指令:

序号 缓存响应指令及说明
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 = 秒

指示客户端愿意接受年龄不超过指定秒数的响应。

9 s-maxage = 秒

此指令指定的最大年龄将覆盖 max-age 指令或 Expires 头指定的最大年龄。私有缓存始终忽略 s-maxage 指令。

广告