HTTP header配置(跨域请求)
HTTP header即HTTP消息头,是指在超文本传输协议(Hypertext Transfer Protocol,HTTP)的请求和响应消息中的消息头部分,定义了HTTP传输过程中的具体参数。
跨域资源共享CORS(Cross-origin resource sharing)简称跨域访问,当A网站去访问B网站的资源时,就会发出跨域请求。如果此时B网站的资源不允许A网站进行跨域资源访问,就会遇到跨域问题。此时就可以使用HTTP Header配置功能,在返回的响应消息中添加所需的消息头,以实现跨域访问等目的。
注意事项
- 部分头部不支持自助设置/删除,具体清单请参见限制条件。
- HTTP响应头配置规则最多可配置10条。
- 由于HTTP header配置是针对域名,因此一旦配置生效,用户对该域名下任意一个资源的响应消息中均会加入所配置的消息头。HTTP响应消息头配置仅会影响客户端(浏览器)的响应行为,不影响CDN节点的缓存行为。
- 如果加速域名在CDN侧配置了跨域规则,请确保源站配置了同样的规则。如果您的域名源站是OBS桶域名,请前往OBS侧配置跨域资源共享。
支持配置的响应头
华为云CDN支持以下几种HTTP响应消息头进行自定义取值。
- Content-Disposition
Content-disposition消息头用来激活客户端下载并指定所下载文件的名称。
服务端向客户端浏览器发送的文件,如果是浏览器支持的文件类型(如txt、jpg等),则默认使用浏览器打开。如果该文件需要用户以附件形式下载并保存为指定名称的文件,则可通过配置Content-disposition消息头实现。
如果您使用了2022年1月1日以后创建的OBS桶作为源站,并且需要支持在线预览功能,您要设置“Content-Disposition”的值为“inline”,详见如何在浏览器中在线预览OBS中的对象?。
- Content-Language
Content-Language消息头用来指明向客户页面端提供的用户偏好语言或语言组合,可以为不同身份用户定制不同的内容。
- Access-Control-Allow-Origin
Access-Control-Allow-Origin响应头携带了服务端验证后允许的跨域请求域名。对于简单跨域请求而言,浏览器经此消息头可以确认是否返回所请求的资源内容给客户端。对于预检请求而言,浏览器经此消息头可以确认是否可以向服务端发起真正的跨域请求。
为防止因浏览器缓存导致报跨域错误,跨域请求头“Access-Control-Allow-Origin”配置完成后,请您及时清理浏览器缓存。
- Access-Control-Allow-Methods
Access-Control-Allow-Methods响应头携带了服务端验证后允许的跨域请求方法。对于简单跨域请求而言,浏览器经此消息头可以确认是否返回所请求的资源内容给客户端。对于预检请求而言,浏览器经此消息头可以确认是否可以向服务端发起真正的跨域请求。
- Access-Control-Max-Age
Access-Control-Max-Age响应头携带了服务端允许的跨域预检请求结果允许缓存的时间。浏览器经此消息头可以确认预检请求结果的缓存时间,在缓存有效期内,浏览器可以使用缓存的预检请求结果判断是否向服务端发起跨域请求。缓存的预检请求结果过期后,下次请求时浏览器需再次向服务端发送预检请求。
- Access-Control-Expose-Headers
Access-Control-Expose-Headers用于指定浏览器可以暴露给客户端的响应消息头。您可以通过配置Access-Control-Expose-Headers自定义客户端可见的响应消息头。浏览器默认客户端可见的响应头有:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。
- 自定义响应头
如果上述响应头不能满足您的业务需求,CDN支持自定义响应头配置,支持以字母开头,字母、数字和短横杠(-)组合,长度1~100以内的自定义响应头名称。
操作步骤
- 登录CDN控制台。
- 在左侧菜单栏中,选择 。
- 在域名列表中,单击需要修改的域名或域名所在行的“设置”,进入域名配置页面。
- 选择“高级配置”页签。
- 在HTTP header配置模块,单击“编辑”,系统弹出“配置HTTP header”对话框,如下图所示。
图1 配置HTTP header
- 单击“添加”,选择对应响应头操作类型。
响应头操作
说明
设置
- 如果设置的头部已存在,则设置后的头部参数取值覆盖原值。
- 如果设置的头部不存在,则会增加该头部。
删除
删除指定的响应头参数。
- 设置头部参数及取值。
参数
取值规则
取值样例
Content-Disposition
激活客户端下载并指定所下载文件的名称。
取值规则:字符长度1-1000,不支持中文字符。常用配置如右侧取值样例所示。
attachment;filename=FileName.xls
Content-Language
指定客户端响应页面的语言。
取值规则:字符长度1-1000,不支持中文字符。常用配置如右侧取值样例所示。
zh-CN
en-US
Access-Control-Allow-Origin
指定跨域请求时,允许访问该资源的外域URL(即请求来源)。
取值规则:
- 支持配置一个具体URL,最多输入66个URL。
- 支持配置泛域名。
- 总的字符数不超过1000。
- 多个URL之间用“,”分隔。
- 在配置指定域名时,需要加上“http://” 或 “https://”前缀。
- 支持配置“*”,如果取值为“*”,则不允许输入其它URL。
- 支持配置带端口的域名。
- 支持配置null,不区分大小写。
样例1:
https://www.example.com
样例2:
*
样例3:
https://www.example.com,https://www.example01.com,https://*.abc.com
Access-Control-Allow-Methods
指定跨域请求时,允许使用的HTTP请求方法。
取值规则:字符总长度1-1000,不支持中文字符。支持同时配置多个请求方法,多个方法间用“,”分隔。
GET,POST,HEAD
Access-Control-Max-Age
指定跨域请求时,客户端程序对特定资源的预检请求返回结果的缓存时间。
取值规则:取值单位为秒,取值范围为:0~1000000000。
86400
Access-Control-Expose-Headers
指定跨域请求时,客户端可见的响应头部信息。
取值规则:长度范围1~1000,不支持中文字符,支持同时配置多个响应头,多个响应头间用“,”分隔。
Content-Length,Content-Encoding
Access-Control-Allow-Headers
用于指定跨域请求时,服务器允许请求中携带的字段。
取值规则:长度范围1~1000,不支持中文字符,支持同时配置多个字段,多个字段间用“,”分隔。
X- Custom-Header
自定义响应头
跨域请求时,客户自定义的响应头部信息。响应头以字母开头,支持数字、大小写字母和“-”,字符长度1-100。
取值规则:长度范围1~1000,支持字母、空格、数字和特定字符“.”、“-”、“_”、“*”、“#”、“!”、“&”、“+”、“|”、“^”、“~”、“'”、“"”、“/”、“:”、“;”、“,”、“=”、“@”、“?”、“<”、“>”。
说明:- 自定义参数为Cache-Control时,支持的取值有:public、private、no-cache、no-store、no-transform、only-if-cached、proxy-revalidate、must-revalidate、immutable、max-age=***、stale-while-revalidate=***、s-maxage=***、stale-if-error=***、min-fresh=***(***代表数字),多个值用“,”分隔,最多配置10个值。
- Cache-Control头部取值可能会影响节点缓存,请慎重配置。
x-testcdn
- 单击“确定”,完成HTTP header配置。
限制条件
- 如果您的后台存在特殊配置,暂不支持配置Content-Type、Expires、Cache-Control、Vary。
- 以下响应头仅支持修改响应头,不支持将“响应头操作”类型设置为“删除”:
Content-Base
Content-Type
Server
Content-Language
Cache-Control
Expires
- CDN暂不支持以下响应头配置:
a_dynamic
upgrade
content-md5
accept-ranges
meter
content-range
keep-alive
www-authenticate
date
allow
proxy-authenticate
range
set-cookie
connection
etag
authentication-info
content-encoding
retry-after
last-modified
proxy-authorization
error
location
content-length
if-modified-since
transfer-encoding
content-location
host