生活分享

Cloudflare 宣布 Cache Rules 支持 HTTP Vary 标头:所有套餐可用,帮助网站在缓存中区分不同版本的内容

Cloudflare 于 2026 年 9 月 22 日宣布在 Cache Rules 中支持 HTTP Vary 标头。网站可以自行决定请求中的哪些信息会影响缓存,从而减少访客收到错误版本内容的情况,也避免缓存被大量几乎相同的副本占满。本文介绍它的运作方式、三种处理动作,以及对网站和普通用户的影响。

阅读时间约 6 分钟

Cloudflare 宣布 Cache Rules 支持 HTTP Vary 标头:所有套餐可用,帮助网站在缓存中区分不同版本的内容
图片:Mokaair (Original editorial artwork)

发生了什么

Cloudflare 于 2026 年 9 月 22 日发布由 Alex Krivit 与 Zaidoon Abd Al Hadi 撰写的博客文章,宣布已推出对 HTTP Vary 响应标头的支持。Cloudflare 表示,这项功能现已在 Cache Rules(Cloudflare 让网站设置缓存行为的规则功能)中提供,适用于所有套餐。文章还引述了一种说法:Vary 曾被称为“the ugliest part of HTTP that we haven't yet improved.”(HTTP 中我们尚未改进的最丑陋部分),可见这个标头一向很难妥善处理。

先解释几个概念。“缓存”是把网页内容的副本存放在离访客更近的地方,下次有人请求时直接用副本回应,而不必每次都去问网站本身的服务器。那台服务器称为“源服务器”。Cloudflare 这样的 CDN(内容分发网络)就是提供这类中间缓存的服务。“标头”是浏览器和服务器在每次请求与响应中附带的说明信息。根据 Cloudflare 的说明,Vary 是标准的 HTTP 响应标头,用来告诉中间缓存:请求中的哪些字段可能让源服务器返回不同的内容。网站常用它在同一网址提供不同语言、图片格式、压缩方式或地区内容。

Cloudflare 宣布 Cache Rules 支持 HTTP Vary 标头:所有套餐可用,帮助网站在缓存中区分不同版本的内容
Mokaair 编辑核查流程 · 图片:Mokaair (Original editorial artwork)
阅读完整文字说明

消息会先收集来源、独立核查,再交由 Jev 判断。

为什么 Vary 难以处理

Cloudflare 用示例说明了其中的两难。第一种情况:如果缓存忽略 Vary,同一网址的 HTML 网页和 JSON 数据可能被错误地发给不同的客户端。例如,程序接口(API)客户端本该收到 JSON 数据,却收到网页标记,结果无法解析。第二种情况:如果缓存把每个原始标头值都当作不同的请求,少数相似的请求就可能分散成数千个几乎无法复用的缓存条目,这些条目称为“变体”。例如,两个 Accept-Language(浏览器声明偏好语言的标头)值的顺序和语言标签不同,但据 Cloudflare 说明,两者实际上都偏好英文,源服务器可能返回相同的英文内容;缓存却可能因为原始值不同而分开存储。

Cloudflare 指出,一个字段有 10 种值会产生 10 个变体,三个字段各有 10 种值就可能产生 1,000 种组合。这些零散的变体会占用存储容量、互相挤出缓存、降低缓存命中率(请求能直接用缓存回应的比例),并让更多请求回到源服务器。Cloudflare 引用的一项分析考察了近 50,000 个热门网站的超过 1.2 亿个响应,发现近 3,000 个网站依据四个以上字段区分内容,部分网站甚至多达 10、23 或 47 个字段。

Cache Rules 如何处理 Vary

Cloudflare 表示,新设计把决策拆成两部分:源服务器用 Vary 指出可能影响响应的请求标头,Cache Rule 则决定 Cloudflare 如何处理每个标头的值。如果源服务器没有返回 Vary,Cloudflare 会照常缓存;没有单独设置的标头,则使用规则的默认动作。

Cloudflare Cache Rules 中处理 Vary 的三种动作(依据 Cloudflare 官方说明整理)
动作Cloudflare 说明的行为Cloudflare 建议的用途
normalize(规范化)先把请求标头整理成统一形式,再选择缓存变体,让实质相同的请求共用同一份缓存;对 Accept、Accept-Language、Accept-Encoding 应用专门的规则处理内容协商类标头的建议起点,适合大量不同请求值最终只对应少数几种响应的情况
passthrough(原样传递)按请求标头的原始字节比对缓存,保留大小写、空格、顺序与重复值取值范围受控、且精确值会改变响应的标头
bypass(绕过缓存)源服务器在 Vary 中列出该标头时,不存储这份响应;已有缓存不会被移除因人而异、取值种类极多(高基数)或非预期的标头

对普通读者与网站管理员的影响

对普通网民而言,这类变更通常发生在幕后,访客不需要做任何操作。按照 Cloudflare 的说法,Vary 的作用是防止缓存把错误版本的内容发给访客,例如错误的语言或格式。对网站管理员而言,Cloudflare 表示,过去处理这类按请求提供不同内容的方法各有局限:绕过缓存等于放弃缓存;自定义缓存键需要重复编写网站已有的判断逻辑;Worker(Cloudflare 的边缘脚本功能)需要额外写代码;Vary for images 只适用于图片这类较窄的用途。新功能试图填补这些方法之间的空白。

需要注意的是,以上功能细节与效益均来自 Cloudflare 自家博客,属于单一来源的说法,实际效果仍取决于各网站的配置与流量情况。本文仅介绍事件内容,不构成任何产品或服务的购买建议。

常见问题

什么是 HTTP Vary 标头?

根据 Cloudflare 说明,Vary 是标准 HTTP 响应标头,用来告诉中间缓存哪些请求字段可能影响源服务器的响应。它常用于在同一网址提供不同语言、图片格式、压缩方式或地区内容。

哪些 Cloudflare 套餐可以使用这项功能?

Cloudflare 表示,Cache Rules 中的 Vary 支持适用于所有套餐。

如果我的网站没有发送 Vary 会怎样?

Cloudflare 表示,如果源服务器没有返回 Vary,Cloudflare 会照常缓存响应。

三种动作应该从哪一种开始?

Cloudflare 建议,内容协商类标头可以从 normalize 开始;取值受控、且精确值会影响响应时,用 passthrough;因人而异、取值种类极多或非预期的标头,则用 bypass。

这些说法经过独立验证了吗?

没有。本文所有信息均来自 Cloudflare 官方博客,应视为该公司自己的说法。

查看同分类最新消息

最新旅游情报攻略

资料来源

生活分享