https://blog.csdn.net/four_lemmo/article/details/78211520

Cache-Control是HTTP协议的一部分,是在请求和响应中必须服从的指令,通常用于提高页面加载,阻止页面缓存对请求和响应造成不利的干扰。

Cache-Control 为单向指令,即请求中存在的指令,并不意味着响应中存在同样的指令

客户端对请求的处理(请求头设置的Cache-Control):
Web浏览器都有Refresh(刷新)和Reload(重载)按钮,可以强制对浏览器或者***缓存,进行刷新

Refresh的特性取决于特定的浏览器、文档以及拦截缓存的配置。可以通过下面的指令来强化客户端的缓存配置

请求中Cache-Control指令
指令    目的
Cache-Control:max-stale=<s>    缓存可随意提供过期文件,如果指定了参数<s> 在这段时间内,文档不能过期
Cache-Control:max-age=<s>    缓存无法返回缓存时间大于<s>秒的文件,这条指令使得缓存更加严格
Cache-Control:no-cache    除非资源进行了再验证,否则客户端不会接受已经缓存的资源
Cache-Control:no-store    缓存尽快从存储器中删除资源痕迹
Cache-Control:only-if-cached    当缓存中有副本文件存在才,客户端才会获取副本


服务器对Cache-Control的配置:
响应的Cache-Control指令
指令    说明
public    所有内容都被缓存
private    仅客户端缓存***服务器不缓存
no-cache    必须先与***服务器确认是否更改,然后在在决定使用缓存还是请求
no-store    所有内容都不会被缓存
must-revalidation/proxy-revalidation    如果缓存内容失效,请求必须发送服务器/***进行验证
max-age=<s>    缓存内容在s秒后失效,仅HTTP1.1可用

对于上述配置浏览器的响应为:

浏览器对于Cache-Control的响应
指令    打开新窗口    原窗口单击Enter按钮    刷新    点击返回按钮
public    缓存页面    缓存页面    重新请求页面    缓存页面
private    重新请求    第一次请求,随后缓存    重新请求页面    缓存页面
no-cache/no-store    重新请求    重新请求    重新请求    缓存页面
must-revalidation/proxy-revalidation    浏览器重新请求    第一次请求,随后缓存    重新请求    缓存页面
max-age=xxx    在XX秒后重新请求    在XX秒后重新请求    重新请求    在xx秒后重新请求

设置缓存之后客户端的请求:
HTTP中expires为绝对过期时间,过期时间过期了,说明缓存已过期,max-age定义了请求返回数据中最大使用使用期。

定义了max-age之后,缓存的内容不一定每次都与服务器来进行验证,但是在过期时间到期之后。一定会与服务器验证。

HTTP条件方法可以实现高效的再验证,向服务发送 “ 条件GET ” 目前最常用的为  If-Modified-Since:Date  If-None-Math:ETag(实体标签,版本标识)

If-Modified-Since 表示在指定日期之后资源被更新,就返回新的请求,如果指定日期未更新就返回304直接读取缓存

If-None-Math 有的文档有可能周期性的被重写,通过ETag 来确保文档是否改变,改变返回请求状态为200的新资源,未改变返回状态码304直接读取缓存

这些可以结合使用。

缓存的内容不一定每次都与服务器来进行验证,不同的浏览器对于请求中Cache-Control的值和响应中Cache-Control的值的优先级是不一样的。以下为设置了max-age之后的请求
在资源未失效的情况下,用户打开浏览器窗口。读取缓存的浏览器有
win8.1 firefox55 Gecko55.0
Win7  chrome47 webkit 537.36
Win7 chrome 45 webkit 537.36  45.0.2454.101
Win10 chrome 48 webkit 537.36
Win7 chrome 58 webkit 537.36
Mac OS 10.12.6 safari10 webkit 603.38
winXP chrome55 webkit 537.36   55.0.2883.87
Win7 Maxthon4 4.9.5.1000 webkit537.36
以上浏览器为实测测试。不包括全部
--------------------- 
作者:four_lemmo 
来源:CSDN 
原文:https://blog.csdn.net/four_lemmo/article/details/78211520 
版权声明:本文为博主原创文章,转载请附上博文链接!