浏览器的网络请求304的缓存问题

1、http请求时浏览器先看本地缓存有没有该文件,没有文件就直接发起http请求获取最新js、html等文件。(缓存里面有该文件且没有过期直接使用本地缓存,谁都不商量,所以叫强制缓存)。
2、本地缓存如果过期了的话就去问一下服务器请求的该文件有没有修改,没有修改就返回304继续使用本地缓存,同时更新一下本地缓存的过期时间(Expires和Cache-Control),修改的话返回200获取新文件。(问一下服务器要不要使用本地缓存,所以叫协商缓存)

协商缓存和强制缓存可以同时使用。

在这里插入图片描述

强制缓存:有两个规则判定有没有过期。
Expires和Cache-Control,Cache-Conctrol的优先级比Expires高。
Expires利用的是过期时间,其值为服务器返回该请求的结果缓存的到期时间,即再次发送请求时,如果客户端的时间小于缓存中的Expires的值时,直接使用缓存结果。
Cache-Control利用的是相对时间,当Cache-Control为max-age=600,意思就是说在600秒内再次发起该请求,则会直接使用缓存结果,强制缓存生效。
注:这两个时间是服务器返回来的。

协商缓存:有两个规则判定服务器资源有没有更新。
Etag / If-None-Match的优先级比Last-Modified / If-Modified-Since高。
Last-Modified / If-Modified-Since,由文件的最后更新时间来决定这个文件是否更新。服务器通过Last-Modified 返回给前端,前端请求相同资源的时候使用If-Modified-Since返回给后端。所以Last-Modified值 === If-Modified-Since值。
Etag / If-None-Match,由文件的唯一哈希值来决定这个文件是否更新。服务器通过返回Etag 给浏览器存起来,浏览器再次发起请求时会把这个Etag 值赋值给 If-None-Match送回去,服务器在判断一下是否相等从而判断文件是否已经被修改,同理 Etag值 === If-None-Match值。

总结:
1、强制缓存就看本地文件的约定时间有没有过期,协商缓存就是看服务器文件有没有修改。因为本地缓存可能过期了(服务器定的过期时间),但是服务器上的资源也没有修改,所以也没必要重新返回新文件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值