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