Cache-Control

Author Avatar
Nico Zhang 2月 16, 2018
  • 在其它设备中阅读本文章

Cache-Control 通用消息头被用于在http 请求和响应中通过指定指令来实现缓存机制。缓存指令是单向的, 这意味着在请求设置的指令,在响应中不一定包含相同的指令。

缓存请求指令

Cache-Control: max-age=<seconds>
Cache-Control: max-stale[=<seconds>]
Cache-Control: min-fresh=<seconds>
Cache-control: no-cache 
Cache-control: no-store
Cache-control: no-transform
Cache-control: only-if-cached

缓存响应指令

Cache-control: must-revalidate
Cache-control: no-cache
Cache-control: no-store
Cache-control: no-transform
Cache-control: public
Cache-control: private
Cache-control: proxy-revalidate
Cache-Control: max-age=<seconds>
Cache-control: s-maxage=<seconds>

指令意义

1.可缓存性

  • public
    表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存。
  • private
    表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。
  • no-cache
    在释放缓存副本之前,强制高速缓存将请求提交给原始服务器进行验证。
  • only-if-cached
    表明客户端只接受已缓存的响应,并且不要向原始服务器检查是否有更新的拷贝
    到期

2.到期时间

  • max-age=
    设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)。与Expires相反,时间是相对于请求的时间。
  • s-maxage=
    覆盖max-age 或者 Expires 头,但是仅适用于共享缓存(比如各个代理),并且私有缓存中它被忽略。
  • max-stale[=]
    表明客户端愿意接收一个已经过期的资源。 可选的设置一个时间(单位秒),表示响应不能超过的过时时间。
  • min-fresh=
    表示客户端希望在指定的时间内获取最新的响应。

3.重新验证和重新加载

  • must-revalidate
    缓存必须在使用之前验证旧资源的状态,并且不可使用过期资源。
  • proxy-revalidate
    与must-revalidate作用相同,但它仅适用于共享缓存(例如代理),并被私有缓存忽略。

4.其他

  • no-store
    缓存不应存储有关客户端请求或服务器响应的任何内容。
  • no-transform
    不得对资源进行转换或转变。Content-Encoding, Content-Range, Content-Type等HTTP头不能由代理修改。例如,非透明代理可以对图像格式进行转换,以便节省缓存空间或者减少缓慢链路上的流量。 no-transform指令不允许这样做。

禁止缓存

发送如下指令可以关闭缓存

Cache-Control: no-cache, no-store, must-revalidate