云计算与数据中心

Cloudflare 为所有套餐通过 Cache Rules 提供 HTTP 响应差异控制

Cloudflare 为所有套餐的 Cache Rules 增加了对 HTTP Vary 响应头的支持,并提供规范化请求头值、按原样传递或绕过缓存等选项。此次更新旨在防止错误响应,并减少由请求中无关差异造成的缓存碎片化。

2026-09-22
2 分钟阅读
1 浏览量
certi.news Editorial Team
Cloudflare 为所有套餐通过 Cache Rules 提供 HTTP 响应差异控制

Cloudflare 宣布在其所有套餐中,包括 Free、Pro、Business 和 Enterprise,为 Cache Rules 功能提供 HTTP 响应头 Vary 的支持。这一新增功能让网站管理员能够更好地控制网络如何处理可能为同一资源生成多个表示形式的请求,例如语言、图像格式、内容类型或压缩方式不同的请求。

源站通过 Vary 指定可能影响响应的请求头,但该请求头并不说明这些请求头值之间的所有文本差异是否确实会导致不同响应。因此,缓存系统可能会将相近的值视为独立版本,从而把内容分割成大量重复利用率较低的条目。

处理差异的三种方式

对于源站在 Vary 中列出的每个请求头,Cloudflare 提供三种处理措施:

  • normalize:在选择缓存版本前对值进行规范化。当许多值最终对应有限数量的响应时,这是 Accept、Accept-Language 和 Accept-Encoding 等内容协商请求头的推荐选项。
  • passthrough:使用原始值,包括大小写、空格、顺序和重复值,适用于精确差异会影响响应的情况。
  • bypass:如果 Vary 中列出的请求头具有个人属性或多样性很高,例如 Cookie 或 User-Agent,则不缓存响应。

而 Vary: * 始终会导致绕过缓存,因为请求的任何部分,包括 HTTP 消息之外的信息(如 IP 地址),都可能影响源站选择响应的方式。

实际会发生什么变化?

使用规范化后,形式不同但偏好相同结果的请求可以共享缓存版本。Cloudflare 会将 Accept、Accept-Language 和 Accept-Encoding 的值转换为统一格式,使值变为小写,并按照质量优先级排序;质量相同时则按字母顺序排序。管理员还可以指定支持的媒体类型或语言,例如 text/html、application/json,或 en、fr、de。

不过,这种行为可能会消除源站所需的差异。Cloudflare 指出,q=0 的值或某些语言例外情况可能会在简化过程中丢失,因此,如果源站需要查看客户端发送的这些排除项,应使用 passthrough。此外,传递原始值可能会重新引发碎片化问题:例如 compact,fullcompact, full 可能生成不同的缓存键,即使源站将它们视为等价值。

源站责任与更新限制

对于所有可能因请求头而不同且可缓存的响应,包括备用响应和错误响应,源站都必须以一致方式返回 Vary。如果某个响应遗漏了适当的请求头,Cloudflare 可能会缓存该响应,而不会进行所需的隔离。

更改 Vary 设置不会自动删除现有内容;旧条目可能会一直保留到其过期,或直到执行 purge 操作。此外,Vary 设置并不能在所有情况下取代自定义缓存键:Cloudflare 建议,当请求属性是资源身份的一部分且保持固定时使用自定义缓存键;当源站在响应中声明实际影响响应的字段时使用 Vary。

为什么这则消息很重要?

此次更新解决了 CDN 网络中的一项实际权衡:忽略 Vary 可能会向客户端发送错误的格式或语言,而逐字处理每个值则可能降低缓存命中率,并增加回源请求。根据该文章,对来自约 5 万个热门网站的超过 1.2 亿个响应进行的分析显示,近 3,000 个网站通过四个或更多字段使用差异化,其中一些网站使用了 10、23 或 47 个字段。

实际收益仍取决于源站对所提供资源表示形式的定义质量,以及为每个请求头选择的适当措施。相关设置可通过 Cloudflare 控制面板、Rulesets API 或 Terraform 使用;部署后必须测试不同值,并监控 CF-Cache-Status。

新闻来源
Cloudflare Blog
查看原始来源 ↗
c
作者

certi.news Editorial Team

同一分类

你可能还喜欢

查看所有新闻