配置HTTP响应头

节点HTTP响应头是HTTP响应消息头的组成部分之一,可携带特定响应参数并传递给客户端,用来控制缓存行为。通过配置节点HTTP响应头,当用户请求加速域名下的资源时,DCDN返回的响应消息会携带您配置的响应头,从而实现跨域访问等特定功能。

背景信息

HTTP响应头是HTTP协议中用于控制缓存的一种机制。当客户端请求一个资源时,DCDN节点返回给客户端的HTTP响应头部信息,它允许客户端和DCDN节点在特定条件下缓存响应内容。

image
说明
  • HTTP响应头的配置属于域名维度的配置,一旦配置生效,便会对域名下所有资源的响应消息生效。

  • 配置HTTP响应头仅影响客户端(例如浏览器)的响应行为,不会影响到DCDN节点的缓存行为。泛域名暂不支持配置节点HTTP响应头。

适用场景

  • 告知客户端DCDN响应文件的资源类型:添加响应头Content-Type: text/html告知客户端DCDN响应文件的格式是HTML格式。

  • 实现跨域资源访问:当用户请求DCDN上某个域名的资源时,您可以在CDN返回的响应消息中配置响应头Access-Control-Allow-Origin,以实现跨域访问,请参考配置跨域资源共享

    另外,阿里云DCDN还支持按照已配置CORS规则对接收到的用户的跨域请求进行校验,以实现更灵活的跨域资源访问控制。

  • 自定义响应行为:添加或修改自定义头部信息,可以根据业务需求调整客户端接收到的响应内容和格式,实现特定的功能或跟踪目的。

注意事项

在添加了多条配置的情况下,配置的执行顺序是按配置列表从上到下的顺序逐条执行,因此需要注意对名称相同的“HTTP响应头”的多个配置操作将会叠加,最终结果可能会与预期不符。例如:

  • 配置1:增加HTTP响应头:cache-control: max-age=3600

  • 配置2:增加HTTP响应头:cache-control: no-cache

以上两个配置叠加的结果是配置2最终生效

操作步骤

  1. 登录DCDN控制台

  2. 在左侧导航栏,单击域名管理

  3. 域名管理页面,单击目标域名对应的配置

  4. 在指定域名的左侧导航栏,单击缓存配置

  5. 自定义HTTP响应头页签,单击添加,根据下表中的参数含义设置自定义HTTP响应头。

    image.png

    参数

    说明

    响应头操作

    您可以增加、删除、变更和替换指定的响应头。

    自定义响应头参数

    选择自定义响应头参数。详细信息,请参见响应头参数

    描述

    您自定义的HTTP头的作用。

    自定义响应头名称

    自定义响应头参数选择为自定义时,需要配置自定义响应头名称。自定义响应头名称要求如下:

    • 由大小写字母、短划线(-)和数字组成。

    • 长度为1~100个字符。

    响应头值

    输入您要设置的响应头值。详细信息,请参见响应头参数

    是否允许重复

    • 允许:允许重复将会保留源站返回的头,同时会加上一个同名的头。

    • 不允许:如果不允许重复,源站返回的头会被新配置的同名头覆盖。

    跨域验证

    跨域校验默认为关闭状态,只有在响应头操作为“增加”,自定义响应头参数为“Access-Control-Allow-Origin”的时候才可以配置。

    • 开启:开启状态下DCDN节点将按以下规则对用户做跨域校验,并根据校验结果响应“Access-Control-Allow-Origin”的值。

    • 关闭:关闭状态下DCDN节点不会校验用户请求中携带的Origin头,只会固定响应已配置的“Access-Control-Allow-Origin”值。

    跨域校验规则请参见跨域校验规则

  6. 单击确定,完成配置。

    自定义HTTP响应头列表中,您也可以单击修改删除,对当前配置的HTTP头进行相应操作。

跨域校验规则

重要

是否允许重复跨域验证这两个配置项之间存在互斥,是否允许重复配置为允许的情况下,跨域校验将会失效。

  • 任意匹配:自定义响应头参数“Access-Control-Allow-Origin”的值设置为“*”不论用户请求里面是否携带“Origin”参数,也不论携带的“Origin”参数为何值,都固定返回“Access-Control-Allow-Origin:*”。

  • 精确匹配:自定义响应头参数“Access-Control-Allow-Origin”的值设置了单个或者多个值(多个值之间用“,”分隔)。

    • 如果用户请求头里携带的“Origin”参数值与被设置的任意一个值精确匹配,就会响应对应的跨域头。

    • 如果都没有精确匹配上,则不响应跨域头。

  • 泛域名匹配:自定义响应头参数“Access-Control-Allow-Origin”的值设置了泛域名,则会校验请求头中Origin值是否能匹配上“Access-Control-Allow-Origin”的泛域名。

配置示例请参见配置跨域资源共享

响应头参数

响应头参数

说明

示例

自定义

支持添加自定义响应头。自定义响应头名称要求如下:

  • 由大小写字母、短划线(-)和数字组成。

  • 长度为1~100个字符。

Test-Header

Content-Type

指定浏览器响应对象的内容类型。

text/html

Cache-Control

指定客户端程序请求和响应遵循的缓存机制。

no-cache

Content-Disposition

指定客户端程序把请求所得的内容存为一个文件时提供的默认的文件名。

examplefile.txt

Content-Language

指定浏览器响应对象的语言。

en-US

Expires

指定浏览器响应对象的过期时间。

Wed, 21 Oct 2015 07:28:00 GMT

Pragma

Pragma HTTP 1.0是用于实现特定指令的响应头,具有通过请求和响应链实现各种效果的功能,可用于兼容HTTP 1.1。

no-cache

Access-Control-Allow-Origin

指定允许的跨域请求的来源。填写星号(*)表示全部域名;您也可以填写完整域名,例如http://www.aliyun.com

说明
  • 响应头值支持配置为“*”,表示任意来源。

  • 响应头值非“*”的情况下,支持配置单个或者多个IP、域名、或者IP和域名混合。相互间用“,”分隔。

  • 响应头值非“*”的情况下,必须包含协议头“http:// ”或者“https://”。

  • 响应头值支持携带端口。

  • 响应头值支持泛域名。

  • *

  • http://www.aliyun.com

  • https://aliyun.com:8080,http://10.10.10.10

  • http://*.aliyun.com

Access-Control-Allow-Methods

指定允许的跨域请求方法。可同时设置多个方法,多个方法用英文逗号(,)分隔。

POST,GET

Access-Control-Allow-Headers

指定允许的跨域请求字段。

X-Custom-Header

Access-Control-Max-Age

指定客户端程序对特定资源的预请求返回结果的缓存时间,单位为秒。

600

Access-Control-Expose-Headers

指定允许访问的自定义头信息。

Content-Length

Access-Control-Request-Method

发出请求时报头用于预检请求让服务器知道哪些HTTP方法在实际请求时将被使用。

POST

Access-Control-Request-Headers

发出请求时报头用于预检请求让服务器知道哪些HTTP头在实际请求时将被使用。

X-PINGOTHER

Access-Control-Allow-Credentials

该响应头表示是否允许客户端携带验证信息。

  • 返回true:允许。

  • 返回其他值:不允许。

true

常见问题

为什么已经配置了响应头Access-Control-Allow-Origin,但是访问资源仍提示跨域问题,response header中没有配置的响应头?

如果您在阿里云DCDN中配置了回源响应头,如Access-Control-Allow-Origin等,但是在客户端访问资源时遇到跨域问题,并且在响应头(response header)中没有看到这些配置的响应头,可能原因有以下几点:

可能的原因

  1. 配置未生效或错误:可能是配置没有正确设置或尚未生效,导致CDN没有按照预期返回跨域响应头。

  2. DCDN缓存:DCDN节点可能缓存了旧的响应头信息,这会导致即使您已更改配置,也仍然返回旧的头信息。

  3. 源站问题:如果您在DCDN上配置了跨域响应头,但是源站的响应中也包含了跨域响应头,并且这些响应头与DCDN的配置冲突,这可能会导致问题。在这种情况下,需要统一DCDN和源站的配置。

  4. 浏览器缓存:浏览器可能缓存了旧的响应,导致它并未发起新的请求以获取更新后的响应头。

解决方案

  1. 验证配置:确认DCDN配置已正确设置并且已经生效,特别是跨域相关的响应头设置。

  2. 清除DCDN缓存:您可以使用DCDN的刷新功能清空已缓存的内容,然后再次访问资源。具体请参见刷新和预热资源

  3. 检查源站设置:确认源站不会返回与DCDN配置冲突的跨域响应头。建议将源站回源响应头与节点响应头中的跨域头设置为一致,如果配置不一致,可能会导致冲突。

  4. 清除浏览器缓存:清空浏览器缓存,或使用无痕(隐私)模式测试,确保浏览器获取最新的响应头。

  5. 联系技术支持:如果您尝试了上述所有方法,但问题仍然存在,可能是CDN服务方面的问题。请联系阿里云DCDN的技术支持或提交工单寻求帮助。