缓存机制笔记

本文详细解析了浏览器端的缓存规则,包括新鲜度(过期机制)与校验值(验证机制)两大方面,同时介绍了如何通过HTML的<meta>标签及HTTP协议的报头来控制缓存,探讨了不同缓存控制方式的优先级以及一些不适用缓存的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浏览器端的缓存规则
  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/

转载于:https://my.oschina.net/nswish/blog/373962

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值