使用 Request Header Transform Rules 可操作发送到源服务器(托管你的网站或应用程序的服务器)的 HTTP 请求标头。
flowchart LR accTitle: Header modifications diagram accDescr: Header transform rules can change the headers sent to your origin server (request header modifications) or sent your your website visitors (response header modifications). A[Visitor] B((Cloudflare)) C[(Origin server)] A -.-> B == "Includes request<br> header modifications" ==> C C -.-> B -. "Includes response<br> header modifications" .-> A style A stroke-width: 2px style B stroke: orange,fill: orange,color: black linkStyle 0,2,3 stroke-width: 1px linkStyle 1 stroke-width: 3px
要修改发送给网站访问者的响应中的 HTTP 标头,请参阅 Response Header Transform Rules。
通过 Request Header Transform Rules,你可以:
- 将 HTTP 请求标头的值设置为字面字符串值,覆盖其先前的值,或向请求添加新标头。
- 根据表达式(基于请求属性计算值的公式)设置 HTTP 请求标头的值,覆盖其先前的值,或向请求添加新标头。
- 从请求中移除 HTTP 标头。
你可以在仪表板中、通过 API 或使用 Terraform 创建请求标头转换规则。
对于更复杂的 request header modifications,请考虑使用 Snippets。
-
你无法修改或移除名称以
x-cf-或cf-开头的 HTTP 请求标头,但cf-connecting-ipHTTP 请求标头除外,你可以移除该标头。 -
出于协议合规性原因,Request Header Transform Rules 通常不允许修改或移除具有禁止标头名称 ↗(例如
Accept-Encoding)的请求标头。 -
你无法修改任何常用于标识网站访问者 IP 地址或初始协议的标头值,例如
x-forwarded-for、true-client-ip、x-real-ip或x-forwarded-proto。如果你的源站需要在到达源服务器的请求中于类似x-real-ip的标头中使用自定义值,请使用 Cloudflare Snippets 或 Cloudflare Workers,并在fetch()子请求上设置该标头。该值必须是语法有效的 IP 地址。此变通方法不适用于跨 zone 子请求,在这种情况下 Cloudflare 会无条件地将值替换为内部 Cloudflare 地址,以防止 IP 欺骗。 -
尽管你可以在 Request Header Transform Rule 中移除
x-forwarded-for标头,但 Cloudflare 的后端代理会在请求到达源服务器之前重新添加它(使用访问者的 IP 地址),因为代理在所有规则阶段之后运行。这同样适用于 Managed Transforms。但是,如果请求由 Cloudflare Workers 处理——Workers 在缓存之前运行——则x-forwarded-for请求标头将不存在,因为代理尚未重新添加它。 -
你无法设置或修改
cookieHTTP 请求标头的值,但可以移除这些标头。配置移除cookieHTTP 请求标头的规则将移除匹配请求中的所有cookie标头。 -
如果你使用计算结果为空字符串 (
"") 或未定义值的表达式来修改现有 HTTP 请求标头的值,则该 HTTP 请求标头将被移除。 -
HTTP 请求标头移除操作将移除所有具有所提供名称的请求标头。
-
目前,有数量有限的 HTTP 请求标头你无法修改。在提供有效用例时,Cloudflare 可能会取消其中部分 HTTP 请求标头的限制。请在社区中发帖 ↗以供考虑。
-
要使用 JSON Web Token (JWT) 内的声明,你必须首先在 API Shield 中设置令牌验证配置。
-
请求标头转换规则按顺序运行,后面的规则可以覆盖先前规则所做的更改。
-
请求和响应字段的值在每个阶段内是不可变的,例如定义请求标头转换规则的
http_request_late_transform阶段。这意味着后面的请求标头转换规则在评估其筛选表达式时仍将使用原始字段值,而不是先前规则更改后的值。请参阅 规则评估期间的字段值 了解更多信息。
Rules 功能的执行顺序如下:
- Single Redirects(单一重定向)
- URL Rewrite Rules(URL 重写规则)
- Configuration Rules(配置规则)
- Origin Rules(源站规则)
- Bulk Redirects(批量重定向)
- Managed Transforms(托管转换)
- Request Header Transform Rules(请求标头转换规则)
- Cache Rules(缓存规则)
- Snippets(代码片段)
- Cloud Connector(Cloud Connector)
上述不同类型的规则优先于 Page Rules(页面规则)。这意味着当 Page Rules 与上述 Rules 产品同时匹配时,Page Rules 会被覆盖。
一般来说,对于非终止动作,同一阶段中规则所做的最后一次更改将生效(后续规则可以覆盖之前规则所做的更改)。但对于终止动作(Block、Redirect 或任一质询动作),规则评估将停止,并立即执行该动作。
例如,如果多个带有 Redirect 动作的规则匹配,Cloudflare 将始终使用第一条匹配规则的 URL 重定向。此外,如果您使用不同的 Cloudflare 产品(单次重定向和批量重定向)配置 URL 重定向,在规则匹配的情况下,最先执行的产品将生效(此处为单次重定向)。
有关产品执行顺序,请参阅阶段列表。
排查 Request Header Transform Rules 时,使用 Cloudflare Trace 判断某条规则是否对特定 URL 生效。