浏览器缓存策略
正常浏览器发起一次全新的http请求时候会响应200状态码,并且返回一些列的缓存结果,这个200在很多时候都是强缓存, 当再次发起相同的请求时候会根据上次的缓存结果服务端再次返回缓存结果,浏览器会根据缓存的结果去命中不同的缓存策略(即强缓存、协商缓存)。当强缓存时候 查看Network面板可以看到部分信息,size 中 大致的强缓存都会显示 from memory cache, from disk cache,这两种区别 前者是从浏览器的内存中的缓存中读取 存在时效性快速性, 后者是直接通过I/O去读取本地的硬盘,速度较于缓存中直接读取较慢。
强缓存(Expires, Cache-Control
Exprires HTTP1.0 产物
设置缓存到期时间 不安全,机器系统时间可以修改
Cache-Control HTTP1.1 产物
public: 所有内容被缓存 (客户端 代理服务器都可以缓存
private: 只有客户端可以缓存
no-cache: 客户端缓存内容需要跟协商缓存验证决定
no-store: 所有内容都不被缓存
max-age: 缓存到期时间
优先级
Cache-Control 优于 Expires
协商缓存(last-modified/if-modified-since, Etag/if-None-match
last-modified/if-modified-since
last-modified 服务端返回响应信息中文件最后修改的时间
if-modified-since 请求时携带的上次的last-modified, 服务端收到后对比文件变更的时间决定返回
Etag/if-None-match
Etag 由服务端返回响应信息中包含的Etage是一段表示
if-None-match 请求携带的表示,服务端通过比较Etag的值做对比,如果一致返回304,否则返回200
优先级
if-None-match 优于 last-modified/if-modified-since