浏览器缓存机制--强缓存和协商缓存

x33g5p2x  于2022-03-11 转载在 其他  
字(1.0k)|赞(0)|评价(0)|浏览(279)

浏览器缓存机制

一般来说,浏览器接收到url后不会立刻向服务器发送请求,而是先在浏览器缓存中寻找,然后再根据情况决定是否向服务器发送请求。而每次向服务器请求之后会将结果和缓存标识存到浏览器中。

强制缓存

强制缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程。当浏览器向服务器发起请求时,服务器会将缓存规则放入HTTP响应报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是 Expires 和 Cache-Control,其中Cache-Control优先级比Expires高。

协商缓存

协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发送请求,根据服务器缓存标识决定是否使用缓存的过程,同样,协商缓存的标识也是在响应报文的http头中和请求结果一起返回给浏览器的。控制协商缓存的字段有:Last-Modified / If-Modified-Since 和 Etag / If-None-Match,其中Etag的优先级比Last-Modified要高。
协商缓存主要返回两种情况:

  1. 200
  2. 304

强制缓存和协商缓存的比较

获取资源方式状态码发送请求到服务器
强缓存从缓存取200(from cache)否,直接从缓存取
协商缓存从缓存取304(not modified)是,通过服务器来告知缓存是否可用

浏览器在缓存中取资源的过程

  • 浏览器请求资源首先命中资源的Expires和Cache-Control,Expires受限于本地时间,如果修改了本地时间可能导致缓存失效,可以通过Cache-Control: max-age指定最大生命周期,状态返回200,但是不会请求数据,在浏览器中能明显看到from cache字样。
  • 强缓存失效,进入协商缓存阶段,首先验证Etag可以保证每一个资源是唯一的,资源变化会导致ETag变化。服务器根据客户端送的If-None-Match值来判断是否命中缓存。
  • 接下来进入协商缓存的Last-Modified / If-Modify-Since阶段,客户端第一次请求资源时,服务端返回的header中会加上Last-Modify,Last-Modify是一个时间标识该资源的最后修改时间,再次请求资源时,request的请求头中会包含If-Modify-Since,该值为缓存之前返回的Last-Modify。服务器收到If-Modify-Since后,根据资源的最后修改时间判断是否命中缓存。

浏览器请求完整过程

相关文章