Cloudflare 在其全球边缘网络中原生支持 HTTP Vary 响应头,并通过 Cache Rules 向所有套餐的客户开放这项能力。借助这一增强功能,源站服务器可以协商本地化文本、现代图像编码或不同的响应内容表示形式;平台运营人员则可以进行细粒度控制,避免缓存严重碎片化。
一直以来,中间层内容分发网络都对 HTTP Vary 头持谨慎态度。按照标准 HTTP 语义,Vary 响应头用于告知下游缓存:源站服务器在生成响应前,检查了特定的请求头。如果缓存不经处理便直接遵循 Vary,客户端请求头中细微的语法差异,例如空格、大小写或客户端首选语言的优先级顺序不同,就可能将同一项资源拆分为数十个不同变体。在一项覆盖约 5 万个热门域名、超过 1.2 亿条 HTTP 响应的实证审计中,Cloudflare 发现,近 3000 个源站会根据四个或更多请求头生成不同响应,极端情况下甚至涉及数十个不同字段。
不受控制的请求头差异经常会造成缓存抖动,导致缓存命中率暴跌、源站负载上升。为了兼顾响应正确性与边缘缓存效率,Cloudflare 将内容协商过程拆分为两个运行阶段。源站服务器继续指定哪些请求头会影响响应生成,而 Cloudflare Cache Rules 则决定边缘节点在计算变体键之前,如何处理、规范化或忽略这些请求头的值。
在 Cache Rules 中配置 Vary 处理方式时,运营人员可以为每个请求头分别定义行为,也可以为未列出的字段设置兜底策略。该引擎提供三种操作:规范化、原样传递和绕过缓存。规范化会将 Accept 和 Accept-Language 等复杂的协商头转换为标准化的等价类别,从而消除客户端之间无关紧要的差异。原样传递会存储精确且区分大小写的字符串,适用于源站应用依赖精确 Token 匹配的情况。绕过缓存则会对匹配易变或高基数请求头的请求完全跳过边缘缓存,确保不确定的响应变体不会占用边缘缓存容量。

提供多种内容表示形式的源站,可以通过标准响应头声明其动态依赖关系:
HTTP/1.1 200 OKContent-Type: application/jsonCache-Control: public, max-age=3600Vary: Accept, Accept-Language工程师可以使用 Cloudflare Ruleset Engine 或控制面板,让 Cloudflare 匹配这些请求并管理请求头的变化。以下 JSON 配置展示了一条 Cache Rule:对内容协商请求头进行规范化,同时对未知变体采用原样传递策略:
{ "expression": "(http.request.uri.path eq \"/api/catalog\")", "action": "set_cache_settings", "action_parameters": { "cache": true, "vary": { "headers": [ { "name": "accept", "action": "normalize" }, { "name": "accept-language", "action": "normalize" } ], "default_action": "pass_through" } }}在底层实现中,Cloudflare 会将源站声明的 Vary 字段与基础缓存键一同记录。基础缓存键由协议、主机和路径组成。后续请求进入后,系统会先查询基础缓存键。如果该缓存键已登记响应变体,边缘节点就会提取相应的请求头,按照指定的 Cache Rule 操作进行计算,并返回匹配的变体。如果没有缓存变体符合规范化后的条件,请求便会转发至源站,源站返回的响应内容随后会被编入变体池索引。
产品经理 Alex Krivit 和系统工程师 Zaidoon Abd Al Hadi 强调,这种两阶段架构解决了手动变通方案长期存在的局限。此前,团队只能在几种方案之间选择:禁用缓存、依赖专用的 Cloudflare Workers、维护脆弱的自定义缓存键,在看到源站响应前预判相关请求头,或者使用 Vary for Images 等专用扩展。自定义缓存键会预先针对传入请求计算规则,这意味着即使源站返回的是静态且不会变化的响应,这些规则仍然会生效。相比之下,Cache Rules 中的 Vary 规则只会在源站响应包含 Vary 头时动态触发,从而避免为不变的响应无谓扩张缓存键空间。

尽管新机制降低了实现内容协商的难度,但在对高熵请求头启用完全原样传递模式前,运营人员仍须评估缓存键的基数。如果原样传递的请求头包含任意 Token 或会话标识符,每一个不同的客户端字符串都会生成一条独立的边缘缓存记录,从而缩短缓存生命周期,并加剧缓存淘汰抖动。Cache Rules 中的 Vary 支持目前已面向所有 Free、Pro、Business 和 Enterprise 区域开放。
原文链接:https://www.infoq.com/news/2026/09/cloudflare-http-vary/





