Note / Growing note

HTTP 缓存机制:强缓存与协商缓存

整理 Cache-Control、ETag 与 Last-Modified 的分工,以及浏览器重新验证资源的过程。

This piece is written in Chinese; there is no English version yet.

HTTP 缓存的核心目标,是在“内容足够新”的前提下减少传输与等待。

强缓存

浏览器可以根据 Cache-Control 判断本地副本是否仍然有效。如果未过期,通常无需向服务器发起请求。

Cache-Control: public, max-age=3600

max-age 表示响应从生成开始可以被认为新鲜的秒数。对于带内容哈希的静态资源,可以设置较长时间并配合 immutable

协商缓存

当本地副本过期,浏览器可以携带验证信息询问服务器:

  • If-None-Match 对应服务器此前返回的 ETag
  • If-Modified-Since 对应 Last-Modified

资源未变化时,服务器返回 304 Not Modified,不再传输完整正文。

当前理解

强缓存解决“要不要发请求”,协商缓存解决“发出请求后要不要重新传正文”。实际策略需要结合资源是否带哈希、更新频率与共享缓存来决定。