概述同一 URL 可能因语言、压缩或格式不同而返回不同表示。正确设置 `Vary` 可让缓存系统基于请求头构造合适的缓存键,避免交叉复用导致的错误内容。关键头与用法`Vary`: 描述影响响应的请求头,常见有 `Accept-Encoding`、`Accept-Language`;让缓存分片并正确复用[参考1,3,5]。`Accept-Encoding`: 指明客户端支持的压缩;与 `Vary: Accept-Encoding` 配合,分别缓存 `gzip/br` 等版本[参考2,3]。`Accept-Language`: 指明语言偏好;与 `Vary: Accept-Language` 结合对语言版进行缓存分片[参考4,3]。实践注意避免 `Vary: User-Agent`(变体过多降低命中);优先用特征检测与渐进增强替代[参考3]。个性化内容使用 `Cache-Control: private` 而非对 `Vary` 指定 `Cookie`[参考3]。CDN/Service Worker 可自定义缓存键逻辑(如 VCL/Javascript),实现更细粒度控制[参考3]。参考与验证[参考1]MDN:内容协商指南与 `Vary` 在缓存协作中的作用:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Guides/Content_negotiation[参考2]MDN:`Accept-Encoding` 概念与行为说明:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Accept-Encoding[参考3]MDN:HTTP 缓存指南(`Vary`、User-Agent 说明与私有缓存):https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Guides/Caching[参考4]MDN:`Accept-Language` 与内容语言协商:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Reference/Headers/Accept-Language[参考5]MDN:`Vary` 响应头定义与用途:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Vary关键词校验关键词与内容协商及缓存键一致。

发表评论 取消回复