glownight

返回

核心区别一句话:

  • 强缓存:浏览器自己判断“还没过期”,不发请求,直接用本地副本。
  • 协商缓存:浏览器会发请求问服务器“资源变没变”,由服务器决定用旧的还是新的。

分别看哪些头:

  1. 强缓存
  • 主要看响应头
    • Cache-Control(最重要,尤其 max-age
    • Expires(老方案,兼容用)
  • 请求头
    • 命中强缓存时通常没有对应网络请求(所以也就没有验证类请求头)
    • 若用户强刷/禁缓存,可能带 Cache-Control: no-cachePragma: no-cache
  1. 协商缓存
  • 服务器下发的响应头
    • ETag
    • Last-Modified
  • 浏览器下次请求带的请求头
    • If-None-Match(对应 ETag
    • If-Modified-Since(对应 Last-Modified

返回结果:

  • 未变化:304 Not Modified(通常无响应体,继续用本地)
  • 已变化:200 OK + 新内容(并更新 ETag/Last-Modified

补充:实际流程通常是先看强缓存,强缓存不命中再走协商缓存。

说下 HTTP 强缓存 和 协商缓存 的区别,分别看哪些响应头/请求头?
作者 glownight
发布于 2025年4月9日