Skip to content

浏览器的强制缓存与协商缓存 #16

@Hyrmm

Description

@Hyrmm

前言

下面讨论的是都是针对响应头返回的控制浏览器缓存策略的标识,用户主动通过请求头控制浏览器缓存的不在这讨论。

强缓存

  • 强制缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程。强缓存又分为两种ExpiresCache-Control

  • Expires,Cache-Control都是用来标识缓存过期时间,区别在于Expires是绝对时间,与真实时间有所偏差,而Cache-Control

  • Cache-Control的值一般使用的是max-ageno-cacheno-store

协商缓存

  • 协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程。

  • 请求携带的标识与之前服务器返回标识对应:If-Modified-Since=》Last-ModifiedIf-None-Match=>Etag

  • 对于EtagLast-Modified都是用来记录文件是否变动,区别在于Last-Modified上次修改文件内容的时间,但存在修改内容时间发生了变动,但是文件内容却没变动,所Etag弥补这个不足,Etag是这个资源内容的一个标识。

  • 对于服务器返回俩种情况,304资源没有更新,继续使用过期的缓存,并且重置缓存的时间。200资源发生了变动、拿到的是新的资源惊喜协商户村。

图解


总结:

  • 强制缓存和协商缓存前提是存在缓存。
  • 强制缓存和协商缓存都针对静态资源。
  • 强制缓存在前,协商缓存在后。
  • 资源未过期触发强制缓存,资源过期后再触发协商缓存。
  • 判断过期的方法expires(绝对时间)、cache-control(相对时间)
  • 判断资源是否有更新(Last-Modified 和 ETag)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions