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

Posted wangjun5159

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于http Cache-Control详解及nginx设置Cache-Control的主要内容,如果未能解决你的问题,请参考以下文章

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

详解浏览器Cache-Control缓存策略

http缓存协议详解

02--Http请求头及缓存知识

HTTP头详解:

转载浏览器缓存详解:expires cache-control last-modified