浅谈Web缓存

Web缓存分为两类

  • http缓存
  • 浏览器缓存

1、缓存位置

  • Service Worker
  • Memory Cache
  • Disk Cache
  • Push Cache

2、浏览器缓存分为三类

  • cookie
  • localStrorage
  • sessionStorage
    cookie的最大容量为4kb, localStorage, sessionStorage容量为5M
    localStorage可永久存储, 除非调用API删除或手动删除
    sessionStorage关闭浏览器即可清除

3、http缓存分为两类

  • 强制缓存: 不经过服务器,直接从缓存中读取数据
  • 协商缓存: 向服务器发送请求,由服务器决定是从缓存中读取数据,还是由服务器返回新的数据

3.1 浏览器请求过程

我用浏览器搜索一个问题,浏览器首先就会向本地缓存发送一个HTTP请求,由于我是第一次请求此数据,缓存中必然是没有记录的,没有命中缓存,接着浏览器向服务器发送HTTP请求,服务器发出响应,响应头中包含缓存标识,浏览器将请求结果存入浏览器缓存中,并进行数据解析与页面渲染。

3.2 强缓存

3.2.1 与强缓存有关的响应头:
expires: 缓存资源到期的时间, 这个时间之前就是取的缓存数据
缺点: 本机时间可被修改, 不准确
catch-control: 规定缓存资源的有效时间, 例如max-age=2592000
若过期的话, 就走协商缓存
在这里插入图片描述

3.3协商缓存

3.3.1 与协商缓存有关的响应头与请求头
在这里插入图片描述

3.3.1.1 响应头:Last-Modified 请求头:If-Modified-Since
Last-Modified:资源的最后修改时间
服务器在响应时,会有一个Last-Modified的响应头,浏览器下次请求时,If-Modified-Since的值就会设为服务器上次响应的Last-Modified的值,请求到达服务器时,服务器就会根据这个值与服务器端资源更新时间进行比对,如果自上一次响应后资源未更新,则返回状态码304,表示资源未更新,可以直接从缓存中取数据,浏览器收到304后,就去缓存中取数据。如果比对后发现自上次响应后,服务器资源有更新,则返回200状态码,重新从服务器中响应数据和缓存标识等,存入浏览器缓存。

缺点:Last-Modified的值精确到秒,若在秒内发生资源更新,则可能导致浏览器依旧从缓存中读取数据。
在这里插入图片描述

3.3.1.2 响应头:ETag 请求头:If-None-Match
ETag:若服务器资源更新,则ETag也会更新
在这里插入图片描述

流程与Last-Modified/If-Modified-Since一致,解决了秒内发生资源更新,无法识别的问题

3.3.2 两者比较
优先使用 Etag。
Last-Modified 只能精确到秒级。
如果资源被重复生成,而内容不变,则 Etag 更精确。

4 三种刷新操作对 http 缓存的影响

正常操作:地址栏输入 url,跳转链接,前进后退等。
手动刷新:f5,点击刷新按钮,右键菜单刷新。
强制刷新:ctrl + f5,shift+command+r。

正常操作:强制缓存有效,协商缓存有效。
手动刷新:强制缓存失效,协商缓存有效。
强制刷新:强制缓存失效,协商缓存失效。

5 总结

在这里插入图片描述

浏览器每次请求时,首先判断是否有缓存,若无缓存则向服务器发送请求,并将响应结果存至缓存。

若有缓存,第一选择都是走强缓存——直接访问浏览器缓存,若缓存数据有效(评判指标:有效时间,依据:Expires或Cache-Control)则直接从缓存返回数据;若缓存数据无效,则走协商缓存(解决服务器端有资源更新的问题)。

协商缓存的要点就是判断资源有无更新(依据:Last-Modified/If-Modified-Since,ETag/If-None-Match)。若无更新(304),依旧从缓存中返回数据,若有更新(200),则从服务器返回数据,并更新缓存。

参考资料
http 缓存
浏览器缓存——强缓存与协商缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值