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
来源地址:https://blog.csdn.net/wangjun5159/article/details/128564360