浏览器缓存机制:强缓存、协商缓存

传送门:https://www.cnblogs.com/chengxs/p/10396066.html

Expires、Cache-Control
Etag / If-None-Match
Last-Modified / If-Modified-Since

缓存方式有硬盘缓存和内存缓存

请求分为xhr、js、css、img请求,xhr为页面运行时的接口请求,其他的为静态资源请求

在浏览器中,浏览器会在js和图片等文件解析执行后直接存入内存缓存中,那么当刷新页面时只需直接从内存缓存中读取(from memory cache);而css文件则会存入硬盘文件中,所以每次渲染页面都需要从硬盘读取缓存(from disk cache)

1.强缓存:不会向服务器发送请求,直接从缓存中读取资源,在chrome控制台的network选项中可以看到该请求返回200的状态码;from memory cache 或者 from disk cache(一定有from标识来源,没有from的话则用的不是缓存资源)
在这里插入图片描述
在这里插入图片描述

强缓存过期或者不存在的情况下发起请求:
2.协商缓存:向服务器发送请求,服务器会根据这个请求的request header(为上次响应头拿到的)的一些参数来判断是否命中协商缓存,如果命中,则返回304状态码并带上新的response header通知浏览器从缓存中读取资源;
在这里插入图片描述

强缓存和协商缓存
在介绍缓存的时候,我们习惯将缓存分为强缓存和协商缓存两种。两者的主要区别是使用本地缓存的时候,是否需要向服务器验证本地缓存是否依旧有效。顾名思义,协商缓存,就是需要和服务器进行协商,最终确定是否使用本地缓存。
两者的共同点是,都是从客户端缓存中读取资源;区别是强缓存不会发请求,协商缓存会发请求

其实就是先判断有无缓存?有,进行强缓存判断,例如:判断是否过期,否,直接使用缓存。过期,发送请求,根据新的响应头,判断是否命中协商缓存,命中,继续使用之前的缓存,没命中,使用新的资源。

有人说不设置强缓存单独使用协商缓存是无意义的,但是在多人共享下载文件的时候,若使用了强缓存,则下载的文件可能不是最新的(至少得保证是当前时间最新的),这里应该就是直接用协商缓存去判断改缓存到底还是不是最低的。但是,任何东西都直接用协商缓存,每次都要发起请求,要缓存还有什么意义?所以要看具体场景。(个人理解,理解错误评论区可以教一下)

强制使用本地缓存,那么如何告知刷新缓存?让请求(header加上ETag)或者url的修改与文件内容关联(文件名加哈希值)

上线是先发页面还是静态资源?覆盖式发布和非覆盖式发布?分集群部署?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值