打开浏览器,进入某个网站,按F12,然后就看得到Cache Control这个参数了,如果找不到这个参数,可以换个网站试试。


这个Cache-Control的作用就是服务端告诉客户端(浏览器)当前的HTTP Response是否可以缓存,上图的Cache-Control:max-age=2592000意思是浏览器可以缓存当前数据2592000秒,Cache-Control响应头还有以下几种参数可以设置:
- private:代表客户端可以缓存;
- public:代表客户端和代理服务器都可以缓存;这里的代理服务器可以是nginx、CDN等中间节点,所以设置为public后代表在nginx、CDN中都可以缓存;
- max-age:后面往往是数字,代表多少秒,意思是缓存的内容将在(数字)秒之后失效;失效之后,客户端需要重新向服务器发起请求,
- no-cache:代表每次请求都要强制向服务器再验证一次,这里注意一下,这个no-cache的意思不是不缓存,它是可以缓存的,只是我们每次要用到当前缓存的数据的时候都要再向服务器验证一次数据是否有效。

- no-store:代表不缓存请求的任何响应内容;这个跟no-cache容易搞混淆,no-store才是不缓存内容,no-cache字面意思太误导人了。。
- ETag:资源的唯一标识;这个是服务端返回给浏览器的参数,代表服务器每个资源的唯一标识,浏览器第一次请求数据会接收这个参数并保存下来,浏览器每次验证的时候都带上这个参数,这样服务器只需要比较客户端传过来的ETag是否跟第一次发送数据产生的ETag一致就可以校验了,如果有效就返回304状态码。
- If-None-Match:客户端发送的匹配Etag标识符;跟上面的Etag是一对的,一个是服务端产生的,一个是客户端发送的;
- Last-modified:资源最后被修改的时间;
- If-Modified-Since:客户端发送的匹配资源最后修改时间的标识符;跟Last-modified参数匹配,如果If-Modified-Since的时间早于Last-modified的时间,说明这个资源是无效的,反之则是有效的;
浏览器的刷新方式
浏览器的刷新方式可以分为几种,不同的刷新方式对应浏览器的缓存策略也不同。
- 按回车键刷新:刷新之后,看Cache-Control对应的max-age是否仍然有效,有效就直接用当前缓存的数据,如果Cache-Control变成no-cache,则浏览器要重新向服务器验证有效性。
- window系统F5刷新或Mac系统command+R刷新:这种刷新方式直接使得Cache-Control的max-age变为0,浏览器需要重新向服务器验证有效性。
- window系统ctrl+F5或Mac系统command+shift+R强制刷新:这种方式直接把Cache-Control和协商头给去掉,浏览器需要重新向服务端请求数据。