修改出站响应头

更新时间:
复制 MD 格式

出站响应头是HTTP响应消息头的组成部分之一,可携带特定响应参数并传递给客户端,可用于控制缓存行为、跨域访问、内容类型、下载方式等多种客户端行为。通过修改出站响应头,当用户请求加速域名下的资源时,CDN返回的响应消息会携带您配置的响应头,从而实现跨域访问等特定功能。

背景信息

出站响应头是HTTP协议中用于控制缓存的机制。当客户端请求资源时,节点返回的HTTP响应头允许在特定条件下缓存内容。

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

  • 配置HTTP响应头仅影响客户端(例如浏览器)的响应行为,不影响CDN节点的缓存行为。加速域名为泛域名暂不支持修改出站响应头。

适用场景

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

  • 实现跨域资源访问:当用户请求CDN上某个域名的资源时,您可以在CDN返回的响应消息中配置响应头Access-Control-Allow-Origin,以实现跨域访问,您可以参考配置跨域资源共享来了解详细信息。阿里云CDN还支持按照已配置CORS规则对接收到的用户的跨域请求进行校验,以实现更灵活的跨域资源访问控制。

  • 实现文件下载:通过 CDN 加速域名访问 OSS 文件时,浏览器默认预览文件。在出站响应头中添加 Content-Disposition: attachment,使浏览器触发下载而非预览。

  • 自定义响应行为:根据业务需求添加或修改自定义头部信息,调整客户端接收的响应内容和格式。

注意事项

  • 在添加了多条配置的情况下,执行顺序按配置列表从上到下,因此需要注意多个配置操作将会叠加,最终结果可能会与预期不符。以下例子中配置2最终生效:

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

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

  • 引用规则条件时,按所关联规则条件的优先级匹配,而非按功能自身的配置顺序匹配。

  • CDN不支持删除或修改Via、EagleId等系统保留响应头。这些Header用于CDN节点信息记录,即使配置删除或修改也无效,系统仍会保留最后一个节点的信息。

  • 出站响应头配置修改后一般在5分钟内生效,无需重新预热(预热不会改变已缓存资源的响应头)。

操作步骤

  1. 登录CDN控制台。

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

  3. 在域名管理页面,找到目标域名,单击操作列的管理。

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

  5. 单击修改出站响应头页签。

  6. 单击添加,修改出站响应头。

    下面以增加出站响应头为例,为您介绍配置方法。

    参数

    说明

    响应头操作

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

    自定义响应头参数

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

    自定义响应头名称

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

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

    • 长度为1~100个字符。

    响应头值

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

    是否允许重复

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

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

    跨域验证

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

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

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

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

    规则条件

    规则条件能够对用户请求中携带的各种参数信息进行识别,以此来决定某个配置是否对该请求生效。

    重要

    引用规则条件时,按所关联规则条件的优先级匹配,而非按功能自身的配置顺序匹配。

    • 不使用:不使用规则条件。

    • 若需新增或编辑规则条件,请在规则引擎中进行管理。

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

    成功修改出站响应头后,您可以在出站响应头节点HTTP响应头列表中,对当前的配置进行修改或删除操作。

配置示例:为PDF文件配置 Cache-Control:no-cache

如果希望客户端对PDF文件进行协商缓存(每次请求都向CDN节点验证文件是否更新),可以通过规则引擎实现:

  1. 在添加出站响应头配置时,选择使用规则条件。

  2. 设置匹配条件为文件扩展名包含 .pdf。

  3. 配置动作为修改出站响应头,添加 cache-control:no-cache。

重要

此配置仅影响CDN返回给客户端的响应头,使客户端进行协商缓存,但不影响CDN节点本身对该PDF文件的缓存策略。

跨域校验规则

重要

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

  • 任意匹配:自定义响应头参数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

Cache-Control

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

no-cache

Content-Disposition

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

examplefile.txt

Content-Type

指定客户端程序响应对象的内容类型。

text/plain

Pragma

Pragma 是一个在 HTTP/1.0 中规定的通用首部,这个首部通常用于在服务器的响应中定义客户端对文件的缓存行为。

no-cache

Access-Control-Allow-Origin

Access-Control-Allow-Origin 是 HTTP 响应头,用于指示哪些源可以访问资源。它是跨域资源共享(CORS, Cross-Origin Resource Sharing)机制的一部分,该机制允许服务器声明其资源是否可以被某个指定的源(域名)访问。该响应头的值支持以下类型:

  • 通配符 *:使用通配符表示允许任何源访问资源。这种方式非常宽松,适用于那些公开无需认证或授权即可访问的资源。不过,在生产环境中使用通配符时需要谨慎,因为它可能带来安全风险,比如恶意站点脚本读取接口响应数据。

  • 单个指定源:你可以指定一个具体的源(域名),表示仅允许该特定源访问资源。例如,http://example.com 或 https://api.example.com。这要求请求必须来自指定的源,否则将被拒绝。

  • *

  • http://www.aliyun.com

Access-Control-Allow-Methods

指定允许的跨域请求方法。多个方法用英文逗号,分隔。

POST,GET

Access-Control-Allow-Headers

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

X-Custom-Header

Access-Control-Expose-Headers

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

Content-Length

Access-Control-Allow-Credentials

该响应头表示是否可以将对请求的响应暴露给页面。

  • 返回true:表示可以暴露。

  • 返回其他值:表示不可以暴露。

true

Access-Control-Max-Age

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

600

Content-Security-Policy

配置内容安全策略(CSP),用于控制页面可以加载哪些资源,防范 XSS 攻击和数据注入等安全威胁。CDN不对CSP策略内容做语义校验,仅校验HTTP响应头基本格式。策略内容需为单行字符串,不能包含换行符、非法控制字符或未转义的引号,且不要包含外层双引号。建议先在浏览器开发者工具中验证策略正确性后再填入,或在源站配置CSP由CDN透传。

default-src 'self'; script-src 'self' 'unsafe-inline'

Permissions-Policy

配置权限策略,用于控制浏览器特定功能(如摄像头、麦克风、地理位置等)的访问权限。

camera=(), microphone=()

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

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

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

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

  • 响应头值支持泛域名。

出站与入站响应头的区别

出站响应头与入站响应头作用于缓存链路的不同环节,配置前请先确认目标对象:

  • 出站响应头(节点 HTTP 响应头):由 CDN 节点发送给客户端(如浏览器)的响应头。节点有缓存内容时直接返回给客户端,无需向源站请求。该类响应头用于控制客户端与 CDN 节点之间的缓存行为。

  • 入站响应头(回源 HTTP 响应头):由源站发送给 CDN 节点的响应头。节点缓存过期或未命中时会向源站请求最新内容,源站返回的头部就是入站响应头。该类响应头用于控制源站与 CDN 节点之间的缓存行为。

说明

入站响应头的修改(如修改 Set-Cookie 的 domain 字段)只会影响源站到 CDN 节点之间的通信,终端用户不会感知。如需影响终端用户收到的响应,请配置出站响应头;如仍无效,建议直接在源站修改响应头。

批量配置多个域名

出站响应头配置支持批量添加到多个域名。可调用接口 BatchSetCdnDomainConfig 进行批量域名配置,通过该接口的功能参数设置响应头添加规则。

配置生效时间

配置一般在 5 分钟内生效,生效前状态显示为配置中属正常现象。

常见问题

响应头配置后未生效等问题的排查方法,请参见缓存排障指南。