HTTP用于分布式操作系统, 在其中使用响应缓存, 我们可以提高性能。 HTTP / 1.1协议包含许多元素, 这些元素旨在使缓存正常工作。因为这些元素相互交互, 并且它们是协议其他方面不可分割的, 所以将HTTP缓存设计与响应代码, 方法, 标头等的详细描述分开描述是很有用的。
在许多情况下, HTTP缓存基本上用于消除发送请求的需要。在许多其他情况下, 它也用于消除发送完整响应的需要。
在HTTP中, 缓存机制是对缓存的隐式指令, 其中服务器指定了到期时间和验证符。为此, 我们使用Cache-Control标头。
Cache-Control标头用于允许客户端或服务器在请求或响应中传输各种指令。这些指令将覆盖默认的缓存算法。缓存的指令在逗号分隔的列表中指定。
例
Cache-control: no-cache
客户端在其HTTP请求中使用缓存请求指令, 如下所示:
序号 | 缓存请求和描述指令 |
---|---|
1 | no-cache表示返回的响应, 不能用于满足对同一URL的后续请求。 |
2 | no-store表示客户端将不存储有关客户端请求或服务器响应的任何内容。 |
3 | max-age = seconds用于指示客户端愿意接受其年龄不大于以秒为单位指定的时间的响应。 |
4 | max-state [= seconds]用于指示客户端愿意接受超过其到期时间的响应。如果指定了秒数, 则它的到期时间不得超过该时间。 |
5 | min-fresh = seconds用于指示客户端愿意接受其新鲜度不小于其当前时间加上其指定时间(以秒为单位)的响应。 |
6 | no-transform不转换实体。 |
7 | 仅当缓存时不检索新数据。仅当文档在高速缓存中时才可以由高速缓存发送, 并且不应与原始服务器联系以查看其是否存在较新的副本。 |
服务器可以在其HTTP响应中使用高速缓存响应的伪指令, 如下所示:
序号 | 缓存响应和描述指令 |
---|---|
1 | public表示可以缓存任何缓存的响应。 |
2 | 专用用于指示响应消息的某些部分或全部响应消息是针对单个用户的。一定不能通过共享缓存对其进行缓存。 |
3 | no-cache表示返回的响应不能用于满足对同一URL的后续请求。 |
4 | no-store表示客户端将不存储有关客户端请求或服务器响应的任何内容。 |
5 | no-transform不转换实体。 |
6 | must-revalidate表示缓存必须在使用之前验证过时文档的状态, 并且不应使用过期的文档。 |
7 | proxy-revalidate proxy-revalidate指令和must-revalidate指令具有相同的含义, 不同之处在于它不适用于非共享的用户代理缓存。 |
8 | max-age = seconds用于指示客户端愿意接受其年龄不大于以秒为单位指定的时间的响应。 |
9 | s-maxage = seconds指令指定的最大年龄会覆盖Expires标头或max-age指令指定的最大年龄。专用缓存始终忽略s-manage指令。 |