Expires和Cache-Control(pragma)

Expires和Cache-Control(pragma)主要用于强制缓存中

Expires

  • Expires是HTTP/1.0控制浏览器缓存的字段,其值为服务器返回请求结果缓存的到期时间,即下次发起该请求,如果客户端是时间小于Expires的值,就直接从浏览器缓存中获取结果
  • Expires控制缓存的原理是客户端时间和服务器返回的时间作对比,但如果客户端时间和服务端时间不一致(例如时区不同),就会产生误差,强制缓存就没有意义了
  • 由于这个弊端在HTTP/1.1中就使用Cache-Control来代替它

cache-control

在HTTP/1.1中,Cache-Control是最重要的规则,主要用于控制网页缓存,主要取值有:

  • public:所以内容都将被缓存(客户端和代理服务器都可缓存)
  • private:所以内容只有客户端可以缓存,Cache-Control的默认取值
  • no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
  • no-store:所有内容都不会被缓存,即不使用强缓存也不使用协商缓存
  • max-age=xxx(xxx is numeric):缓存内容将在xxx秒后失效
  • s-maxage:和max-age一样,并且覆盖max-age,只在代理服务器中生效
  • max-stale:资源最大过期时间,例如设置为30,就是缓存过期时间还有30秒
  • min-fresh:希望在多少秒内获取最新的相应
  • must-revalidate:告诉浏览器、缓存服务器,本地副本过期前,可以使用本地副本;本地副本一旦过期,必须去源服务器进行有效性校验

注:在无法确定客户端的时间和服务端的时间是否同步的情况下,cache-control比expires更好,同时如果二者同时存在,Cache-Control的优先级高于Expires

pragma

pragma是HTTP标准中定义的header属性,请求中包含pragma的效果跟在头信息中定义Cache-Control: no-cache相同,但是HTTP的响应头没有明确定义这个属性,所以它不能拿来完全替代HTTP/1.1中定义的Cache-Control。通常定义pragma用来向后兼容基于HTTP、1.0的客户端

优先级

pragma > Cache-Control > Expires

results matching ""

    No results matching ""