关于浏览器的缓存

93 阅读1分钟

简单捋一下浏览器的缓存,其实面试只要能把这几点说出来就够用了。。。

关于强缓存

  • 强缓存: 不和服务器通讯;
  • 强缓存没有发出真实的 http 请求,但返回的状态码是200 (from cache 或者 from disk);
  • 强缓存字段: expires cache-control
  • 浏览器根据上一次请求的 response header 中的 expires 和 cache-control 来判断是否命中强缓存,如果命中则直接从缓存中获取资源。
  • cache-control > expires
  • caches-control no-cache 直接走协商缓存 private 只能被终端用户的浏览器缓存(cdn这种不行) max-age=3600(缓存时间)
  • Expires 资源失效时间

关于协商缓存

  • 协商缓存: 会和服务器通讯一次;
  • 协商缓存 请求的状态码是 304 (not modified)
  • 带上 IF-Modified-Since(对应 Last-Modified 文件修改时间) 或者 IF-None-Match(对应 Etag 资源hash串)
  • 它们的值分别是第一次请求返回的 Last-Modified 或者 Etag,由服务器来对比这一对字段来判断是否命中。如果命中,则服务器返回 304 状态码,并且不会返回资源内容,浏览器会直接从缓存获取;否则服务器最终会返回资源的实际内容,并更新 header 中的相关缓存字段。

大致的总结

结果: cache-control > expires > Etag > Last-Modified