Skip to content

浏览器缓存

强缓存
  • Cache-Control
    • max-age : 最大缓存过期时间
    • no-cache : 不使用缓存,每次使用缓存前,都向服务器请求一次,无视缓存设定时间立即发出请求验证
    • no-store : 不使用缓存
    • public : 可以被所有用户缓存
    • private : 只能被当前用户缓存
  • Expires
    • 就是一个时间戳,表示缓存过期时间;
    • 已经被cache-control替代
协商缓存

如果强缓存未命中,则使用协商缓存;可以询问服务器资源是否被修改,如果被修改,则返回新的资源,否则返回304,继续使用缓存;

  • Etag/If-None-Match
    • 一串hash值,表示资源内容;
    • 如果资源内容发生变化,则hash值也会发生变化;
  • Last-modified/If-Modified-Since
    • 是一个时间戳,表示资源最后修改时间;
    • 如果资源修改时间大于If-Modified-Since,则返回200的同时返回新的资源,否则返回304(Not Modified),继续使用缓存;
    • 优先级低于Etag
总结:

当浏览器请求一个资源时,先通过 Expires 和 Cache-Contro 判断强缓存是否生效,生效则直接使用缓存;

若强缓存不生效,则发起请求与服务器进行协商缓存,协商缓存生效返回 304,不生效则返回 200 + 最新资源;

协商缓存 ETag/If-None-Match 和 Last-Modified/If-Modified-Since 两对 Header 来实现;

HTTP 1.1 协议定义的头字段优先级高于 HTTP 1.0,通常两种字段都会设定来保证向后兼容;

HTTP 缓存原理并不复杂,也不存在标准的使用方式,不同场景需要按照实际情况配置不同的缓存策略,让缓存发挥到最大的作用。

本站访客数 人次 本站总访问量