浏览器缓存机制

相信很多做WEB的朋友都有遇到过浏览器缓存的问题 为了及时看到修改的效果  F5光荣的成为了按下频率最高的键(至少我是这样的)而且是屡试不爽啊 ⋯⋯等等,有时候确实很不爽——

如遇到缓存的时候
每当这个时候,要么Ctrl+F5,要么手动删除临时文件,甚至在网站里设置无缓存,可以说什么招都用上了,不过其原理倒是一直没有深究过
然后发现一个有趣的现象

1.从其他页面跳回某页面或者新打开这个页面的时候,如果有缓存,图片、css、js都不会下载而是直接使用缓存
2.在当前页面刷新时(无论是刷新还是强制刷新),所有通过html以及css加载的元素都会重新下载
3.(最神奇的一点)通过js加载的文件,只要缓存在,就没见它刷新过。
联想自己写php的时候,很多时候都会将缓存的有效时间设置为负值,以保证网站被修改时始终能“即时刷新”。
老实说我不知道我们这个网站有没有使用这一点,我也拿不准上面3条是不是通用的情况,于是我开始思考:
默认的浏览器缓存机制是怎么样呢?

浏览器是通过Last-Modified和Expires两种机制来处理缓存的

过期头 (Expires) 机制
Expires 头部字段提供一个日期和时间,响应在该日期和时间后被认为失效。失效的缓存条目通常不会被缓存(无论是代理缓存还是用户代理缓存)返回,除非首先通过原始 服务器(或

者拥有该实体的最新副本的中介缓存)验证。
就我这个俗人来点通俗一点的理解这个就是和cookies的有效期是类似的

控制文件是否有修改 Last-Modified/E-Tag 机制
Last-Modified 实体头部字段值通常用作一个缓存验证器。简单来说,如果实体值在 Last-Modified 值之后没有被更改,则认为该缓存条目有效。ETag 响应头部字段值是一个实体标记,


它提供一个 “不透明” 的缓存验证器。这可能在以下几种情况下提供更可靠的验证:不方便存储修改日期;HTTP 日期值的 one-second 解决方案不够用;或者原始服务器希望避免由于


使用修改日期而导致的某些冲突。
一个不太形象也不太具象的比喻就是 验证文件的“希哈值”(比喻,比喻而已,非专业的)


然后了解在浏览器中各种刷新的响应机制:
F5:不允许浏览器直接使用本地缓存,因此Last-Modified能起作用,但Expires无效
Ctrl+F5:是强制刷新,因此缓存机制失效
“转至”或地址栏里回车:正常的访问,Last-Modified和Expires都有效


Ps:不生成缓存除了设置 http头外 加密内容和使用Post传输也不会生成缓存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值