浏览器缓存

Posted auserroot

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浏览器缓存相关的知识,希望对你有一定的参考价值。

浏览器缓存

浏览器缓存分为强缓存和协商缓存。当客户端请求某个资源时,获取缓存的流程:

  • 先根据这个资源的 http header 判断它是否命中强缓存,先检查 Cache-Control, 如果存在相关参数,则直接从本地获取缓存资源,不会发请求到服务器;
  • 当强缓存没有相关http header,客户端会发送请求到服务器,服务器通过 请求头(request header)验证这个资源是否存在配置协商缓存,称为 http再验证,如果存在,服务器将请求返回,但不返回资源,而是返回304告诉客户端直接从缓存中获取,客户端收到返回后就会从缓存中获取资源;(服务器通过请求头中的 If-Modified-Since或者If-None-Match 字段检查资源是否更新)
  • 强缓存和协商缓存共同之处在于,如果存在缓存相关http header ,服务器都不会返回资源; 区别是,强缓存不对发送请求到服务器,但协商缓存会。
  • 当协商缓存也没有相关配置时,服务器就会将资源发送回客户端。
  • 当 ctrl+f5 强制刷新网页时,直接从服务器加载,跳过强缓存和协商缓存;
  • 当 f5刷新网页时,跳过强缓存,但是会检查协商缓存;

强缓存

  • Expires(该字段是 http1.0 时的规范,值为一个绝对时间的 GMT 格式的时间字符串,代表缓存资源的过期时间)
  • Cache-Control:max-age(该字段是 http1.1的规范,强缓存利用其 max-age 值来判断缓存资源的最大生命周期,它的值单位为秒)

协商缓

  • Last-Modified(值为资源最后更新时间,随服务器response返回,即使文件改回去,日期也会变化)
  • If-Modified-Since(通过比较两个时间来判断资源在两次请求期间是否有过修改,如果没有修改,则命中协商缓存)
  • ETag(表示资源内容的唯一标识,随服务器response返回,仅根据文件内容是否变化判断)
  • If-None-Match(服务器通过比较请求头部的If-None-Match与当前资源的ETag是否一致来判断资源是否在两次请求之间有过修改,如果没有修改,则从协商缓存中获取资源)
参考: 浏览器缓存

以上是关于浏览器缓存的主要内容,如果未能解决你的问题,请参考以下文章

浏览器缓存原理简述

HTTP缓存

Vue 部署上线清除浏览器缓存

为啥在浏览器缓存处理缓存时使用服务工作者进行缓存?

浏览器缓存:强缓存和协商缓存

HTTP学习彻底弄懂 Http 缓存机制 - 浏览器缓存机制详解