简单捋一下浏览器的缓存,其实面试只要能把这几点说出来就够用了。。。
关于强缓存
- 强缓存: 不和服务器通讯;
- 强缓存没有发出真实的 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