HTTP 缓存

2024 年 8 月 29 日 | 阅读 3 分钟

HTTP 用于分布式操作系统,通过使用响应缓存,我们可以提高性能。HTTP/1.1 协议包含许多旨在使缓存正常工作的元素。因为这些元素相互作用,并且与协议的其他方面密不可分,所以将 HTTP 缓存设计与响应代码、方法、标头等的详细描述分开描述很有用。

HTTP 缓存主要用于消除在许多情况下发送请求的需要。它还用于消除在许多其他情况下发送完整响应的需要。

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

Cache-Control 标头用于允许客户端或服务器在请求或响应中传输各种指令。缓存的默认算法被这些指令覆盖。缓存的指令在一个以逗号分隔的列表中指定。

示例

客户端在其 HTTP 请求中使用缓存请求指令,如下所示

序号缓存请求指令和描述
1no-cache
它表示返回的响应不能用于满足对同一 URL 的后续请求。
2no-store
它表示客户端不会存储有关客户端请求或服务器响应的任何信息。
3max-age = 秒数
它用于表示客户端愿意接受其年龄不超过指定秒数的响应。
4max-state [=秒数]
它用于表示客户端愿意接受已超过其过期时间的响应。如果给出了秒数,则其过期时间不得超过该时间。
5min-fresh= 秒数
它用于表示客户端愿意接受其新鲜度寿命不小于其当前年龄加上指定秒数的响应。
6no-transform
它不转换实体主体。
7only-if-cached
它不检索新数据。只有当文档在缓存中时,缓存才能发送文档,并且不应联系源服务器以查看它是否存在较新的副本。

缓存响应指令可以由服务器在其 HTTP 响应中使用,如下所示

序号缓存响应指令和描述
1public
它表示任何缓存都可以缓存响应。
2private
它用于表示响应消息的某些部分或所有响应消息都供单个用户使用。它不得被共享缓存缓存。
3no-cache
它表示返回的响应不能用于满足对同一 URL 的后续请求。
4no-store
它表示客户端不会存储有关客户端请求或服务器响应的任何信息。
5no-transform
它不转换实体主体。
6must-revalidate
它表示缓存在使用陈旧文档的状态之前必须验证其状态,并且不应使用已过期的文档。
7proxy-revalidate
proxy-revalidate 指令和 must-revalidate 指令具有相同的含义,但它不适用于非共享用户代理缓存。
8max-age = 秒数
它用于表示客户端愿意接受其年龄不超过指定秒数的响应。
9s-maxage = 秒数
指令指定的最大年龄会覆盖 Expires 标头或 max-age 指令指定的最大年龄。私有缓存始终忽略 s-manage 指令。

下一主题HTTP URL 编码