对于经由 HTTP 可见的共享缓存传输的图片响应,要发布明确的生存时间和校验器。当图片可以安全地跨用户复用时,示例响应头如下:

Cache-Control: public, max-age=604800
ETag: "image-v4"

生存时间以秒为单位;604800 表示一周。只有面向跨用户复用的内容才使用 public。

如果浏览器和共享代理需要不同的生存时间,由 s-maxage 提供共享缓存的生存时间。例如,max-age=3600 搭配 s-maxage=604800 会让共享缓存获得更长的保鲜期。

Expires 是日期,不是时长

Expires 接受 HTTP 日期格式的时间戳。max-age 会覆盖该字段,而在共享缓存中 s-maxage 优先。生成响应时再生成任何 Expires 日期。

重新加载可以请求校验

包含 Cache-Control: no-cache 的请求 会要求先向源站成功校验,然后才复用已存储的响应。即使响应的常规保鲜策略本来允许复用,也会出现这种情况。

校验器让缓存能高效地检查未变化的图片。304 响应可以在不重传源站图片字节的情况下确认已存储的表示。因此,发往源站的流量本身并不意味缓存对象已被丢弃。

复查策略时,请对比常规复用和显式重新加载。

相关文章