浏览器缓存分为强缓存和协商缓存。当客户端请求某个资源时缓存流程:
- 先根据这个资源的一些http header 判断是否命中强缓存,如果命中,直接从本地获取缓存资源,不会发请求到服务器
- 当强缓存没有命中时,客户端会发送请求到服务器,服务器通过另一些 request header 验证这个资源是否命中协商缓存,称为http验证,如果命中,服务器将请求返回,但不返回资源,而是告诉用户客户端直接从缓存中获取,客户端收到返回后就会从缓存中获取资源
- 强缓存和协商缓存共同之处,如果命中缓存,服务器都不会返回资源,区别:强缓存不会发送请求到服务器,但协商缓存胡,
- 当协商缓存没命中时,服务器就会将资源发送给客户端。
- 当 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是否一致来判断资源是否在两次请求之间有过修改,如果没有修改,则命中协商缓存)
- 本文作者: 不想
- 本文链接: https://evacat.top/2022/02/11/浏览器缓存/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!