must-revalidate
缓存必须在使用之前验证旧资源的状态,并且不可使用过期资源 。表示如果页面过期,则去服务器进行获取 。
proxy-revalidate
与must-revalidate作用相同,但它仅适用于共享缓存(例如代理),并被私有缓存忽略 。
immutable
表示响应正文不会随时间而改变 。资源(如果未过期)在服务器上不发生改变,因此客户端不应发送重新验证请求头(例如If-None-Match或If-Modified-Since)来检查更新,即使用户显式地刷新页面 。在Firefox中,immutable只能被用在 https:// transactions.
- 其他
no-store
缓存不应存储有关客户端请求或服务器响应的任何内容 。表示绝对禁止缓存!
no-transform
不得对资源进行转换或转变 。Content-Encoding, Content-Range, Content-Type等HTTP头不能由代理修改 。例如,非透明代理可以对图像格式进行转换,以便节省缓存空间或者减少缓慢链路上的流量 。no-transform指令不允许这样做 。
两个小示例
- 禁止缓存
发送如下指令可以关闭缓存 。此外,可以参考Expires 和 Pragma 标题 。
Cache-Control: no-cache, no-store, must-revalidate- 缓存静态资源节
对于应用程序中不会改变的文件,通常可以在发送响应头前添加积极缓存 。这包括例如由应用程序提供的静态文件,例如图像,CSS文件和JAVAScript文件 。另请参阅Expires标题 。
Cache-Control:public, max-age=31536000这里扩展一下:
HTTP1.0
HTTP1.0 中通过 Pragma 控制页面缓存,通常设置的值为 no- cache,不过这个值不这么保险,通常还加上 Expires 置为 0 来达到目的 。但是如我们刻意需要浏览器或缓存服务器缓存住我们的页面这个值则要设置为 Pragma 。
HTTP1.1
HTTP1.1 中启用 Cache-Control 来控制页面的缓存与否,Cache-Control 是 http1.1 中的标准,可以看成是 expires 的补充, 使用的是相对时间的概念 。注意几个常用的参数:
no-cache: 浏览器和缓存服务器都不应该缓存页面信息;
public: 浏览器和缓存服务器都可以缓存页面信息;
no-store: 请求和响应的信息都不应该被存储在对方的磁盘系统中;
must-revalidate: 对于客户机的每次请求,代理服务器必须想服务器验证缓存是否过时
目前Cache-Control 请求字段被各个浏览器支持的较好,其优先级也比较高,当和别的字段(如Expires)一起用时,会覆盖其他字段 。
四. nginx 配置管理浏览器静态缓存策略浏览器缓存: expires, cache-control, last-modified, etag. 先来看一张图:

文章插图
每个状态的详细说明如下:
1、Last-Modified
在浏览器第一次请求某一个 URL 时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个 Last-Modified 的属性标记 (HttpReponse Header) 此文件在服务期端最后被修改的时间,格式类似这样:
Last-Modified:Tue, 24 Feb 2019 08:01:04 GMT客户端第二次请求此URL时,根据HTTP协议的规定,浏览器会向服务器传送If-Modified-Since报头(HttpRequest Header),询问该时间之后文件是否有被修改过:
If-Modified-Since:Tue, 24 Feb 2019 08:01:04 GMT如果服务器端的资源没有变化,则自动返回 HTTP304(NotChanged.)状态码,内容为空,这样就节省了传输数据量 。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似 。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源 。
注意: 如果 If-Modified-Since 的时间比服务器当前时间(当前的请求时间 request_time) 还晚,会认为是个非法请求
2、Etag 工作原理
HTTP 协议规格说明定义 ETag 为“被请求变量的实体标记”(参见14.19) 。简单点即服务器响应时给请求 URL 标记,并在 HTTP 响应头中将其传送到客户端,类似服务器端返回的格式:
Etag:“5d8c72a5edda8d6a:3239″客户端的查询更新格式是这样的:
If-None-Match:“5d8c72a5edda8d6a:3239″如果ETag没改变,则返回状态 304 。即: 在客户端发出请求后,HttpReponse Header 中包含Etag:“5d8c72a5edda8d6a:3239″
标识,等于告诉Client端,你拿到的这个的资源有表示 ID:5d8c72a5edda8d6a:3239 。当下次需要发 Request 索要同一个 URI 的时候,浏览器同时发出一个 If-None-Match 报头(Http RequestHeader) 此时包头中信息包含上次访问得到的 Etag:“5d8c72a5edda8d6a:3239″标识 。
If-None-Match:“5d8c72a5edda8d6a:3239“
推荐阅读
- 尚客茶业吹响中秋下价集结号
- 从间谍木马到远控木马,这群黑客下手越来越狠
- 网络营销:关于外链你了解多少?
- 神经衰弱吃什么药 让你的神经松弛下来
- 5个家常菜让钙片“下岗”
- 关于今年普洱茶价格的思考
- 每天一杯茶 再也不怕电脑辐射
- 刘备对儿子留下的遗言 刘备临终前遗言
- 梦见骑自行车下坡很快掉到悬崖下面了 梦见骑自行车下坡很快是什么意思
- 梦见奶奶第二次去世头掉下来了 梦见奶奶第二次去世,我哭到不行
