LouisTsang-jk.github.io

缓存

因为浏览器和服务器之间的通信方式是应答模式,在浏览器第一次向服务器发起请求之后拿到请求结果,会根据响应报文中的 HTTP 头的缓存标识来决定是否需要缓存结果。 那缓存又分为强缓存协商缓存.

机制

  1. 当浏览器加载资源的时候会根据这个资源的 http header 判断是否命中强缓存,命中则直接从本地缓存中返回
  2. 如果没有命中强缓存,则浏览器会发送一个请求到服务器,服务器根据 http header 验证这个资源是否命中协商缓存,如果命中则将这个请求返回,告诉浏览器可以直接从缓存中加载这个资源
  3. 当强缓存和协商缓存都不命中的时候就直接从服务器加载资源数据

强缓存

通过设置 header 的 ExpiresCache-Control 来实现


协商缓存

强缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程,如果协商缓存生效返回 304,不生效返回 200。 相关的缓存标识有两对,分别是

启发式缓存

当既没有 max-age,也没有 exprires,浏览器会依然请求缓存内容,而不是请求服务器。他的策略机制是根据当前头的 Date 和 Last-Modified 的时间差值,取 10%作为缓存时间周期。