首页 > 代码库 > 缓存机制笔记

缓存机制笔记

浏览器端的缓存规则
  1. 新鲜度(过期机制):1)HTTP协议报头中带有完整的过期时间,并仍在有效内。 2)浏览器已经使用过缓存且在一个会话中检查过新鲜度
  2. 校验值(验证机制):浏览器再次请求,通过此值判定是否获取新的内容

浏览器缓存的控制
  1. HTML的<meta>标签,但不是所有浏览器都支持,且对代理服务器无效
  2. HTTP协议的报头中带有控制信息。

新鲜度:
  1.  Expires: 设定过期的具体时间
  2. Cache-Control: 更加细致的控制。1)no-cache or no-store。2)max-age。3)public or private
  3. Last-Modified: 告诉浏览器当前资源的最后修改时间
  4. If-Modified-Since: 告诉服务器当前资源的浏览器所知道的最后修改时间

校验值:
  1. ETag:告知浏览器当前资源的唯一标识符
  2. If-None-Match: 告知服务器当前资源浏览器所知道的唯一标识符

缓存机制的层次
  1. 通过Cache-Control/Expires形成第一道缓存:直接去本地
  2. 通过Last-Modified/ETag形成第二道缓存:304返回

ETag存在的原因
  1. Last-Modified是秒级的,在一秒内多次变化的资源无法体现
  2. 定期生成的文件,无变化但也无法缓存

优先级
  1. Cache-Control > Expires
  2. ETag > Last-Modified
  3. Cache-Control/Expires > ETag/Last-Modified

不缓存的情况
  1. HTTP头中,Cache-Control:max-age=0 或是 Cache-Control:no-cache 或是 Pragma:no-cache
  2. 不带任何和缓存有关的HTTP头时,不缓存
  3. POST请求不会被缓存
  4. HTTPS请求不会被缓存
  5. 动态内容不会被缓存

参考资料:
  1. http://www.alloyteam.com/2012/03/web-cache-2-browser-cache/

缓存机制笔记