浏览器缓存

浏览器缓存分为强制缓存和协商缓存

强制缓存就是浏览器向服务器请求资源,服务器响应头给予一个cache-control 或者expires ,在这个时间之内,就不会向服务器请求资源,但是强制缓存有个问题:如果服务端已经更新数据了,但是我们的本地浏览器还使用之前的旧数据,也就是使用本地的缓存,那么就不对了对吧,所以我们要使用协商缓存。

当然cache-control有几个常用的属性

  • no-cache 使用协商缓存
  • no-store不使用缓存,每次都要向服务器发送请求
  • max-age=数字 缓存的时间

如果我们的cache-control是no-cache那么就是协商缓存了,就走协商缓存的逻辑

协商缓存的状态码是304,浏览器向服务器发送请求,服务器会根据请求头携带的一些参数来判断是否命中协商缓存,如果命中,那么就告诉我浏览器从自己的缓存中获取数据,否则就服务器返回新的数据

在浏览器访问服务器的时候,服务器会在响应头给予一个last-modify参数用来代表我资源文件最后一次的修改时间(记住存储的是时间)。那么浏览器再次发送请求的时候,会在请求头中携带一个if-modify-since参数,这个数字大部分情况下是等于服务器响应头返回的last-modify,服务器接收到请求之后,会判断last-modifyif-modify-since是否相等,如果相等,就返回304,并告诉浏览器使用缓存,否则服务器返回一个新的文件数据。

但是使用last-modifyif-modify-since有一个缺点,如果我们这个文件用时300ms修改了,那么这个if-modify-since并没有改变,因为他只能精确到秒,文件已经修改了,但是if-modify-since 没有改变,所以并不严谨,我们就推出了新的参数Etagif-none-match

Etag可以理解成是last-modifyif-none-match

  • Etag是加载资源时,服务器返回的响应头字段,是对资源的唯一标记,值是hash码(md5)。
  • Hash值是根据不同的文件,生成的一个字符串
  • 浏览器在下一次加载资源向服务器发送请求时,会将上一次返回的Etag值放到请求头里的If-None-Match
  • 服务器接收到If-None-Match的值后,会拿来跟该资源文件的Etag值做比较,如果相同,则表示资源文件没有发生改变,命中协商缓存。
  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值