Caching
HTTP通常用于分布式信息系统,其中可以通过使用响应缓存来提高性能。 HTTP/1.1协议包括许多旨在使缓存工作的元素。
在HTTP/1.1中缓存的目的是在许多情况下消除发送请求的需要,并且在许多其他情况下无需发送完整响应。
HTTP/1.1中的基本缓存机制是缓存的隐式指令,其中服务器指定到期时间和验证器。 为此,我们使用Cache-Control标头。
Cache-Control标头允许客户端或服务器在请求或响应中传输各种指令。 这些指令通常会覆盖默认的缓存算法。 缓存指令在逗号分隔列表中指定。 例如:
Cache-control: no-cache
客户端可以在其HTTP请求中使用以下缓存请求指令:
SN | 缓存请求指令和描述 |
---|---|
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响应中使用以下缓存响应指令:
SN | 缓存响应指令和描述 |
---|---|
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指令。 |