缓存(二)

控制缓存的能力
服务器可以通过HTTP定义的几种方式来指定在文档过期之前可以将其缓存多长时间,按照优先级递
减的顺序,服务器可以:

  1. Cache-Control: no-store
  2. Cache-Control: no-cache
  3. Cache-Control: must-revalidate
  4. Cache-Control: max-age
  5. Expires
  6. 不附加任何过期信息,让缓存确定自己的过期日期

no-Stroe与no-cache首部可以防止缓存提供未经证实的已缓存对象,表示为no-store的响应会
精致缓存对响应进行复制。缓存通常会向非缓存代理服务器一样,向客户端转发一条no-store响应,
然后删除对象。标示为no-cache的响应实际上是可以存储在本地缓冲区中的

Cache-Contro:max-age首部表示从服务器将文档传过来之时起,可以认为此文档处于新鲜状态的
秒数,还有一个s-maxage首部,其行为与max-age类似,但仅用于共享缓存,服务器可以请求缓存
不要缓存文档,或者将最大使用期设置为0,从而每次访问的时候进行刷新

不推荐使用Expires首部,它指定的是实际的过期日期而不是秒数,由于很多服务器的时钟不同,或
者不正确,所以最好用剩余秒数,而不是绝对日期。

must-revalidate响应首部告诉缓存,在事先没有跟原始服务器进行再验证的情况下,不能提供这
个对象的陈旧副本。缓存仍然可以随意提供新鲜的副本。如果在缓存进行must-revalidate新鲜度
检查时,原始服务器不可用,缓存就必须返回一条504Gateway Timeout错误

如果响应中没有Cache-Control: max-age首部,也没有Expires首部,缓存可以计算出一个试探
性最大使用期