http Cache-Control详解及nginx设置Cache-Control

Cache-Control是个http1.1响应头,用来控制资源缓存,它可取的值:

  • no-store;不允许缓存资源;
  • no-cache;使用缓存前,先去源服务器校验资源有效性,如果未变更,则响应304,不发送资源内容,使用cache中的资源,等于多了一次round-trip,能减少网络传输,如果已经过期,则响应200,并发送资源内容;会携带if-modified-since;if-match;no-cache和max-age:0,must-revalidate表达相同的意思;
  • public: 表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存;
  • private: 表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。私有缓存可以缓存响应内容,比如:对应用户的本地浏览器。;
  • max-age: 设置缓存存储的最大周期,超过这个时间缓存被认为过期 (单位秒)。与Expires相反,时间是相对于请求的时间。
  • Expires:优先级比max-age优先级低;意味着某个date/time后失效;比如Expires: Wed, 21 Oct 2015 07:28:00 GMT
  • immutable:表示响应正文不会随时间而改变。资源(如果未过期)在服务器上不发生改变,因此客户端不应发送重新验证请求头(例如If-None-Match或 If-Modified-Since)来检查更新,即使用户显式地刷新页面;

对于html页面设置的建议

  • 使用缓存前,去源服务器校验有效性,nginx设置方法
location / {
    add_header Cache-Control no-cache;
}
  • 如果不想html被缓存,nginx设置方法
location / {
    add_header Cache-Control no-store,max-age:0; 
}

no-store只能阻止新的资源不会被缓存,不能阻止已经缓存的资源仍被使用,添加max-age:0,可以清除旧缓存;这个设置意味着每次请求都会去源服务器获取资源,状态码就是200;

对不变的js、css等静态资源建议设置:

location / {
    add_header Cache-Control public, max-age:最大值, immutable,max-age;
    //max-age可以设置超大的值,以达到永不过期的目的;
}

顺便说一下,pragma属于http1.0规范,一般来说现在的通信端都用http1.1,所以不缓存时,没必要设置此header了。

Pragma: no-cache

参考

Cache-Control
Expires

猜你喜欢

转载自blog.csdn.net/wangjun5159/article/details/128564360
今日推荐