本文档介绍如何在火山引擎内容分发网络(CDN)中配置 HTTP 响应头。
默认情况下,在对用户请求的响应中,CDN 会包含源站响应中的所有头部。您可以配置 CDN 在用户请求的响应中所包含的头部。
操作步骤
- 登录 火山引擎内容分发网络控制台。
- 在左侧导航栏,点击 域名管理。
- 在 域名管理 页面,找到需要配置的域名,点击 管理。
- 定位 HTTP 响应头设置 模块。
- 如果您使用的是旧版域名管理页面,点击 编辑配置,然后在 缓存配置 标签页中定位 HTTP 响应头设置 模块。
- 如果您使用的是新版域名管理页面,点击 编辑域名。在页面左侧的树状配置项列表中,定位 功能配置 > 缓存配置 > HTTP 响应头设置。如果该模块置灰,点击模块右边的 + 。
关于新旧版域名管理页面的区别,参见 新版域名配置。
- 在 HTTP 响应头设置 模块中,点击 新增规则。您最多可以添加 50 条规则。
- 参照文档下方的 配置说明 对该规则进行配置。
- 配置完成后,点击 提交编辑。

配置说明
配置 | 说明 |
|---|
配置类型 | 表示一个操作类型。该配置有以下选项: - 设置:表示设置一个头部。设置操作包括添加与修改。如果源站响应中已包含该头部,该头部的值会被覆盖。如果源站响应中没有包含该头部,该头部会被添加。
- 删除:表示删除一个头部。
|
头部名称 | 表示需要设置或者删除的一个头部。头部名称是大小写不敏感的。您可以从下拉列表中选择一个常用头部,参见 常用头部。除了 注意事项 中列出的那些头部名称之外,您可以输入任意一个头部名称。头部名称不能超过 1,024 个字符,不能包含以下字符: - 汉字、下划线(_)、空格、双引号(")、冒号(:)
|
取值方式 | 对于您在 头部名称 中指定头部,该配置表示该头部值的类型,有以下选项: - 常量:表示该头部值是一个字符串。
- 变量:表示该头部值来自一个变量。
- 自定义:表示该头部值是变量与字符串拼接后的一个字符串。
|
头部取值 | 表示您在 头部名称 中指定头部的取值。 - 如果 取值方式 是 常量,您需要输入一个字符串。该字符串的长度不能超过 1,024 个字符,不能包含以下字符:
- 汉字、下划线(_)、空格、双引号(")、冒号(:)
- 如果 取值方式 是 变量,您需要从列表中选择一个变量。参见 变量列表。
- 如果 取值方式 是 自定义,您需要输入由变量和字符串拼接后的一个字符串。变量需要包裹在
{} 中,由 $ 开头。例如 bind${remote_addr}to${host}done。
如果 头部名称 是 Access-Control-Allow-Origin,您需要在 头部取值 中指定来源 IP 和来源域名,端口是可选的,域名可以是泛域名。多个来源 IP 和来源域名之间以逗号(,)分隔。建议您指定的来源 IP 和来源域名以 http:// 或者 https:// 开头。 |
跨域校验 | 此配置项决定 CDN 是否根据请求头中的 Origin 字段来进行跨域校验。该配置项仅在满足以下两个条件时才会出现: - 头部名称 为
Access-Control-Allow-Origin。 - 取值方式 为 常量。
Access-Control-Allow-Origin 的值支持以下格式:
- 任意来源:设置为
*。 - 特定来源:设置单个或多个 IP、域名,或者 IP 与域名的组合。多个来源之间用逗号(,)分隔。来源必须包含协议头
http:// 或 https://,且支持携带端口。 - 泛域名:域名支持泛域名格式,例如
https://*.example.com。
启用 跨域校验 后,CDN 的处理逻辑如下: - 任意匹配:如果头部取值设置为
*,无论请求中是否携带 Origin 头部,也不论 Origin 头部的值为何,CDN 都会在响应中返回 Access-Control-Allow-Origin: *。 - 精确匹配:如果头部取值设置为单个或多个具体的来源,CDN 会检查请求头中的
Origin 值是否与设置的任意一个来源精确匹配。
- 如果匹配成功,CDN 会在响应中返回
Access-Control-Allow-Origin 头部,该头部的值为请求中的 Origin 头部的值。 - 如果匹配失败,CDN 不会在响应中返回
Access-Control-Allow-Origin 头部。
- 泛域名匹配:如果头部取值设置了泛域名,CDN 会检查请求头中的
Origin 值是否匹配该泛域名。匹配后的处理逻辑与精确匹配相同。
如果不启用 跨域校验,CDN 不会检查请求中的 Origin 头部,始终将您配置的 Access-Control-Allow-Origin 头部添加到响应中。 说明 - 如果
Access-Control-Allow-Origin 的值包含多个来源,强烈建议您开启 跨域校验。如果不开启,CDN 会将所有来源作为头部值返回,而浏览器通常只允许 Access-Control-Allow-Origin 包含一个值,导致浏览器报错。
跨域资源共享 (CORS) 涉及复杂的安全策略。为了帮助您更好地理解和配置,我们提供了一份 CDN 跨域(CORS)配置的最佳实践。该文档解析了技术原理,并为您提供了针对不同业务场景的配置指南,帮助您解决跨域问题。 |
变量列表
CDN 提供了以下变量。
变量名称 | 说明 | 示例 |
|---|
raw_uri | 表示客户端请求 URL 中的路径。 | /dir/volcano.php
|
request_uri | 表示客户端请求 URL 中的路径和查询字符串(query string)。 | /dir/volcano.php?color=red&n=10
|
remote_addr | 表示发起本次请求的客户端的 IP 地址。 | xx.xx.xxx.xx
|
remote_port | 表示发起本次请求的客户端的端口。 | 5936
|
host | 表示客户端请求中 host 头部的值。 需要留意的是,CDN 在处理请求时可能会修改该头部的值。因此,不建议您使用该头部,而是使用 http_host。 | www.example.com:8080
|
http_host | 表示客户端请求中 host 头部的值。该头部值不会被 CDN 修改。 | |
args | 表示客户端请求 URL 中的查询字符串。 | color=red&n=10
|
msec | 表示 CDN 设置响应头的时间,格式是 Unix 时间戳,精确到毫秒。该时间戳接近首包的响应时间。 | 1704444754.917
|
scheme | 表示客户端使用的协议。 | https
|
cdn_cache_status | 表示请求是否命中缓存。 edge_hit:表示请求命中了边缘节点的缓存。parent_hit:表示请求命中了回源节点的缓存。miss:表示请求没有命中缓存。
| edge_hit
|
response_time | 表示 CDN 处理请求的时长,单位是毫秒。请求处理时长是从 CDN 收到用户请求的第一个字节,到开始响应第一个字节所经过的时间。 | 30
|
常用头部
CDN 提供了以下常用的头部。
说明
这些头部是标准的 HTTP 响应头。如果响应头的值是合法的,客户端浏览器会根据响应头做相应的操作。
头部名称 | 说明 | 示例 |
|---|
Access-Control-Allow-Origin | 指定允许访问您站点资源的来源(origin)。 - 多个来源使用逗号(,)分隔。
- 您可以指定
*,表示任意来源。 - 来源中的 host 可以是 IP 地址,也可以是域名。域名可以是泛域名。
- 来源可以包含端口。
- 如果您指定的来源不是
* 并且 跨域校验 为启用,则来源必须符合 URL 规范,也就是说来源必须包含 scheme 和 host。
| 示例一
* 示例二
https://www.example.net:448,http://xx.xxx.xxx.x,https://*.example.com |
Access-Control-Allow-Methods | 指定跨域请求允许使用的 HTTP 请求方法。多个方法使用逗号(,)分隔。 | GET
|
Access-Control-Allow-Headers | 指定跨域请求允许包含的 HTTP 请求头。多个请求头使用逗号(,)分隔。 | X-Custom-Header
|
Access-Control-Expose-Headers | 指定在客户端运行的脚本所允许访问的响应头。多个响应头使用逗号(,)分隔。 默认情况下,客户端脚本允许访问的响应头有 Cache-Control、Content-Language、Content-Type、Expires、Last-Modified。如果您需要客户端脚本访问更多的响应头,可以在该头部中指定。 | Content-Encoding
|
Access-Control-Allow-Credentials | 指定跨域请求是否需要包含鉴权信息。鉴权信息包括 cookie,鉴权请求头或客户端 TLS 证书。 | true
|
Access-Control-Max-Age | 指定跨域请求时,客户端对请求内容发起的预检请求的缓存时长。单位是秒。在缓存过期前,客户端不用再次发送预检请求。 | 3600
|
Cache-Control | 对于 CDN 返回的内容,指定该内容在客户端的缓存方式。 | max-age=3600
|
Content-Disposition | 指示 CDN 返回给客户端的内容是以下载的方式提供。并指定下载的文件名。 | attachment;filename=Demo.xlsx
|
Content-Language | 指示 CDN 返回给客户端的内容语言。 | zh-CN
|
Content-Type | 指示 CDN 返回给客户端的内容类型。 | text/plain
|
Pragma | 对于 HTTP/1.0,指示 CDN 响应在客户端的缓存方式。头部值只能是 no-cache,指示客户端不要缓存 CDN 的响应。 | no-cache
|
注意事项
您设置的响应头不能是以下头部。
- access-check
- server-timing
- via
- x-request-ip
- x-tt-trace-tag
- x-bdcdn-logid
- byte-error-code
- x-bdcdn-cache-status