秋招总结篇——浏览器缓存!

178 阅读2分钟

——这个系列是对自己最近复习的知识点的总结,便于快速回顾记忆,如果有帮助,不妨点个赞哈!

打开google浏览器,按下f12,平时有注意到这些东西吗?

这个?

image.png

这个?

image.png

还有下面这个?

image.png

当然上面这些都是属于浏览器缓存的范畴。本文将总结一下,浏览器缓存。

为了加强提升用户体验,对用浏览器访问到客户端的一些资源,都是会在浏览器里面进行缓存(协商缓存是默认开启的,强缓存需要手动去修改请求头)

那么缓存分几类呢?

  • 强缓存
  • 协商缓存

他们的主要区别在于流程的不同,浏览器走强缓存,服务端是没有感知的,但是走协商缓存的话,服务端是一定会有感知的。

流程

  • 客户端在第一次请求服务端时会存下一些标志,如图上(下文细🔒)
  • ->在第二次请求时判本地是否达成强缓存条件。
  • ->达成的话,直接返回200并从浏览缓存拿出结果。
  • ->如果没有达成就去访问服务端,服务端判断是否达成协商缓存条件。
  • ->达成的话就返回304,然后去浏览器缓存中拿出结果。
  • ->如果又没达成就重新请求客户端。

强缓存

先细🔒一下强缓存。它有两个标志去控制,expires和cache-control;并且cacche-control的优先级是大于expires的,也就是说如果两者都存在的情况下,以cache-control为依据。

expires的值是一个具体时间,服务器返回该请求结果缓存的到期时间,当第二次请求时候浏览器会对比本地的过期时间,决定是否用缓存,还是继续查看协商缓存字段。

cache-control的常用值:

no-cache就是不使用强缓存,

no-store:不使用缓存。

max-age:是相对的过期时间,是相对于第一次而言。

协商缓存

它的标志有 Last-Modified / If-Modified-Since Etag / If-None-Match

与强缓存一样也有两种方式,且后一组的优先级大于前一组。左边的都是服务端第一次请求发过来的附在响应头上,右面的是请求服务器时带着请求头上面,值是左边对应的值。

第一组返回的是绝对时间,用于直接对比,但不排除更新了但是没有修改具体内容,比如文件动态调用Date对象。

所以采用第二组对每一次改动做一次标志,对比两次标志是否不同决定是否采用协商缓存。