标签:
浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如: Expires; Cache-control等)。但是也有非HTTP协议定义的缓存机制,如使用HTML Meta 标签,Web开发者可以在HTML页面的<head>节点中加入<meta>标签,代码如下:
<meta http-equiv="Pragma" content="no-cache" />
Expires是Web服务器响应消息头字段,在响应http请求时告知浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求
Date表示发送请求的时间,Expires表示文件过期的时间,从上图可以看出,Web服务器告诉浏览器在2015-10-5 07:30:47这个时间点之前,可以使用缓存文件,发送请求的时间是2015-08-30 07:30:47。
不过Expires是HTTP 1.0的东西,现在默认浏览器均默认使用HTTP 1.1,所以它的作用基本忽略。
Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires。
Cache-Control:可以取值public/private/no-cache/no-store/max-age/min-fresh/max-stale
还是上面那个请求,web服务器返回的Cache-Control头的值为max-age=3110400
Last-Modified/If-Modified-Since要配合Cache-Control使用。
Etag/If-None-Match也要配合Cache-Control使用。
你可能会觉得使用Last-Modified已经足以让浏览器知道本地的缓存副本是否足够新,为什么还需要Etag(实体标识)呢?HTTP1.1中Etag的出现主要是为了解决几个Last-Modified比较难解决的问题:
Etag是服务器自动生成或者由开发者生成的对应资源在服务器端的唯一标识符,能够更加准确的控制缓存。Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回304。
用户操作 | Expires/Cache-Control | Last-Modified/Etag |
地址栏回车 | 有效 | 有效 |
页面链接跳转 | 有效 | 有效 |
新开窗口 | 有效 | 有效 |
前进、后退 | 有效 | 有效 |
F5刷新 | 无效 | 有效 |
Ctrl+F5刷新 | 无效 | 无效 |
浏览器第一次请求:
浏览器再次请求时:
标签:
原文地址:http://www.cnblogs.com/yangzhinian/p/4783122.html