使用响应标头转换规则 (Response 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,1,2 stroke-width: 1px linkStyle 3 stroke-width: 3px
要修改发送到源服务器的请求中的 HTTP 标头,请参阅请求标头转换规则。
通过响应标头转换规则,您可以:
- 将 HTTP 响应标头的值设置为字面字符串,覆盖其先前的值;若该标头不存在,则向响应添加新标头。
- 根据表达式设置 HTTP 响应标头的值,覆盖其先前的值;若该标头不存在,则向响应添加新标头。
- 添加带有字面字符串值的新 HTTP 响应标头,而不移除任何同名的现有标头。
- 根据表达式添加新的 HTTP 响应标头,而不移除任何同名的现有标头。
- 从响应中移除 HTTP 标头。
您可以在仪表板中、通过 API 或使用 Terraform 创建响应标头转换规则。
对于更复杂的 response header modifications,请考虑使用 Snippets。
-
响应标头值是使用对应 HTTP 请求中的字段值计算的。例如,字段
ip.src.country(用于表达式中)将返回网站访问者所在的国家/地区,而不是发送响应的源服务器所在的国家/地区。 -
您不能添加、修改或移除名称以
cf-或x-cf-开头的 HTTP 响应标头。 -
您不能修改某些标头的值,例如
server、eh-cache-tag或eh-cdn-cache-control。 -
目前,您不能在响应标头转换规则的表达式中引用 IP 列表。
-
HTTP 响应标头移除操作将移除所有具有所提供名称的响应标头。
-
如果您使用求值为空字符串 (
"") 或未定义值的表达式更改现有 HTTP 响应标头的值,则该 HTTP 响应标头会被移除。 -
目前,有少数 HTTP 响应标头您无法更改。当提出有效用例时,Cloudflare 可能会取消其中部分 HTTP 响应标头的限制。请在社区中发帖 ↗以供考虑。
-
响应标头转换规则也适用于默认的 Cloudflare 错误页面和自定义错误。
-
使用响应标头转换规则修改
cache-control、CDN-Cache-Control或Cloudflare-CDN-Cache-Control标头不会改变 Cloudflare 缓存对象的方式,因为 Cloudflare 在应用响应标头修改之前会先评估缓存行为。若要控制 Cloudflare 缓存行为,请创建缓存规则。 -
若要向响应添加
set-cookie标头,请使用 Add static/Add dynamic 操作之一,而不是 Set static/Set dynamic。Add 操作会追加新标头而不移除同名的现有标头,而 Set 操作会替换该名称的所有现有标头。对set-cookie使用 Set 操作将移除响应中已有的任何set-cookie标头,包括由 Bot Management 等其他 Cloudflare 产品添加的标头。 -
响应标头转换规则按顺序运行,后面的规则可以覆盖先前规则所做的更改。
-
请求和响应字段的值在每个阶段内是不可变的,例如定义响应标头转换规则的
http_response_headers_transform阶段。这意味着后续的响应标头转换规则在评估其过滤表达式时仍会使用原始字段值,而不是被先前规则更改的值。请参阅规则评估期间的字段值了解更多信息。
排查 Response Header Transform Rules 时,使用 Cloudflare Trace 判断某条规则是否对特定 URL 生效。