浏览器缓存机制

浏览器缓存机制

概述:浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的

  • 缓存过程

    浏览器与服务器通信的方式为应答模式,即是:浏览器发起HTTP请求 – 服务器响应该请求。那么浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中,简单的过程如下图:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w6npCO8x-1595665714391)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\1595661542543.png)]

由上图我们可以知道:

  1. 浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识
  2. 浏览器每次拿到返回的请求结果都会将结果和缓存标识存入浏览器缓存中

以上两点结论就是浏览器缓存机制的关键,他确保了每个请求的缓存存入与读取,只要我们再理解浏览器缓存的使用规则,那么所有的问题就迎刃而解了,本文也将围绕着这点进行详细分析。为了方便大家理解,这里我们根据是否需要向服务器重新发起HTTP请求将缓存过程分为两个部分,分别是强制缓存协商缓存

  • 强制缓存

强制缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程,强制缓存的情况主要有三种(暂不分析协商缓存过程),如下:

(1)不存在该缓存结果和缓存标识,强制缓存失效,则直接向服务器发起请求(跟第一次发起请求一致),如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xTQj0ekB-1595665714393)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\1595662090874.png)]

​ (2)存在该缓存结果和缓存标识,但是结果已经失效,强制缓存失效,则使用协商缓存(暂不分析),如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gi335pQ8-1595665714394)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\1595662129415.png)]

​ (3)存在该缓存结果和缓存标识,且该结果没有还没有失效,强制缓存生效,直接返回该结果,如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4tfp9zer-1595665714397)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\1595662170313.png)]

那么强制缓存的缓存规则是什么?

答:当浏览器向服务器发送请求的时候,服务器会将缓存规则放入HTTP响应的报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是 Expires 和Cache-Control,其中 Cache-Conctrol 的优先级比 Expires 高。

  • Expires

Expires是HTTP/1.0控制网页缓存的字段,其值为服务器返回该请求的结果缓存的到期时间,即再次发送请求时,如果客户端的时间小于Expires的值时,直接使用缓存结果。

Expires是HTTP/1.0的字段,但是现在浏览器的默认使用的是HTTP/1.1,那么在HTTP/1.1中网页缓存还是否由Expires控制?

到了HTTP/1.1,Expires已经被Cache-Control替代,原因在于Expires控制缓存的原理是使用客户端的时间服务端返回的时间做对比,如果客户端与服务端的时间由于某些原因(时区不同;客户端和服务端有一方的时间不准确)发生误差,那么强制缓存直接失效,那么强制缓存存在的意义就毫无意义。

  • Cache-Control

在HTTP/1.1中,Cache-Control 是最重要的规则,主要用于控制网页缓存,主要取值为:

(1)public:所有内容都将被缓存(客户端和代理服务器都可缓存)

(2)private:所有内容只有客户端可以缓存,Cache-Control 的默认取值

(3)no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定

(4)no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存

(5)max-age=xxx (xxx is numeric):缓存内容将在 xxx 秒后失效

协商缓存

协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程,主要有以下两种情况:

(1)协商缓存生效,返回304,如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xWfPAJ02-1595665714399)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\1595663919172.png)]

​ (2)协商缓存失败,返回200和请求结果,如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LbVeRJDV-1595665714400)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\1595663946140.png)]

  • 总结

    强制缓存优先于协商缓存进行,若强制缓存(Expires和Cache-Control)生效则直接使用缓存,若不生效则进行协商缓存(Last-Modified / If-Modified-Since和Etag / If-None-Match),协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,重新获取请求结果,再存入浏览器缓存中;生效则返回304,继续使用缓存,主要过程如下:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1s3eDW5d-1595665714402)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\1595664051833.png)]

来源:https://www.cnblogs.com/chengxs/p/10396066.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值