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