当CDN节点上的缓存过期或者没有命中缓存时,CDN节点会向源站发起请求来获取最新内容,源站返回的内容以及相关的HTTP头部信息就是回源响应头。您可以通过调整源站回源HTTP响应头,来设置缓存策略、跨域资源共享等,从而优化网站的加载速度、增强内容安全性、控制资源可访问性,并提高用户体验。
背景信息
HTTP响应头是HTTP的响应消息头的组成部分之一,可携带特定响应参数信息并传递给客户端。
当CDN节点上没有缓存用户请求的内容时,CDN会回源站拉取资源,源站收到CDN的请求后会给出响应。为了便于用户识别源站的响应信息,您可以配置回源HTTP响应头功能,改写用户源站响应报文中的HTTP Header信息。例如,改写回源响应头中Content-Type参数的值,然后再传递给客户端,以确保客户端解析正常(如果源站返回的Content-Type值有误,客户端直接解析将出现乱码,因此需要在CDN上改写)。
回源响应指源站收到CDN节点的请求后,返回给CDN节点的HTTP消息。回源HTTP响应头配置只会影响源站响应给CDN节点的HTTP消息,对于CDN节点直接响应给用户的HTTP消息不做修改。
不支持对泛域名配置回源HTTP响应头。
适用场景
以下是一些常见的场景和示例:
内容类型不正确:如果源站返回的内容类型(
Content-Type
)与实际内容不符,客户端可能会无法正确解析。例如,一个HTML文件被错误地标记为纯文本。这时可以通过配置回源响应头来修正。示例:将
Content-Type: text/plain
更改为Content-Type: text/html
。缓存策略控制:如果您需要对CDN缓存策略进行更精细的控制,可以调整源站的回源响应头中的
Cache-Control
或Expires
字段。这有助于优化内容的更新频率和缓存命中率。示例:将
Cache-Control: max-age=3600
更改为Cache-Control: max-age=86400
,以延长缓存有效期。CDN的默认缓存规则具体请参见阿里云CDN默认缓存规则及优先级。跨域资源共享(CORS):如果您希望允许其他域名的Web应用访问CDN上托管的资源,则需要在源站设置
Access-Control-Allow-Origin
和其他相关的CORS头。这些设置确保在浏览器执行跨域请求时,CDN能够提供适当的响应头给客户端,避免CORS错误。关于跨域访问问题,您可以参见配置跨域资源共享。示例:
Access-Control-Allow-Origin: *
:允许所有域名进行跨域资源请求。Access-Control-Allow-Methods: GET, POST, OPTIONS
:指定允许跨域请求的HTTP方法。
压缩传输:如果源站支持压缩传输但没有启用,或者使用的压缩算法不是最有效的,可以通过设置回源响应头中的
Accept-Encoding
来让源站使用最优的压缩方式。示例:将
Accept-Encoding: gzip, deflate
更改为Accept-Encoding: br
,以优先使用Brotli压缩。关于Brotli压缩相关内容具体请参见Brotli压缩。重定向:当源站需要重定向用户到另一个URL时,回源响应头可以设置正确的重定向响应头。关于重定向具体请参见配置回源301/302跟随。
示例:
Location: https://www.example.com/new-page.html
:通知CDN及用户浏览器新的资源位置,用于301或302重定向。自定义回源行为:在某些情况下,源站可能需要提供一些自定义的头部信息给客户端,以实现特定的功能或跟踪目的,您可以通过配置回源响应头来添加这些自定义头部。
注意事项
在添加了多条配置的情况下,配置的执行顺序是按配置列表从上到下的顺序逐条执行,因此需要注意对名称相同的“HTTP响应头”的多个配置操作将会叠加,最终结果可能会与预期不符。例如:
配置1:增加HTTP响应头:
cache-control: max-age=3600
配置2:增加HTTP响应头:
cache-control: no-cache
以上两个配置叠加的结果是配置2最终生效
操作步骤
登录CDN控制台。
在左侧导航栏,单击域名管理。
在域名管理页面,找到目标域名,单击操作列的管理。
在指定域名的左侧导航栏,单击回源配置。
单击回源HTTP响应头页签。
单击添加。
配置回源HTTP响应头信息。
重要当不同的操作方式同时作用于同一个回源响应头参数时,会存在操作冲突。此时按照操作类型的优先级来执行,优先级顺序为替换>增加>变更和删除。例如,当增加和删除操作同时作用于同一个参数时,会先增加再删除。
增加响应头参数
删除响应头参数
变更响应头参数
替换响应头参数
单击确定。
默认预设响应头
阿里云CDN默认预设了Cache-Control、Content-Type、Expires、Last-Modified四个回源HTTP响应头,这四个响应头是HTTP协议中的重要组成部分,它们分别用于控制缓存、定义内容类型、设置过期时间以及记录资源的最后修改时间。
CDN默认预设响应头 | 说明 | 示例 |
Cache-Control | 用于控制资源在CDN缓存中的行为和时间周期的头信息。它为CDN节点和客户端浏览器提供了缓存指示,例如何时缓存内容、缓存多久,以及缓存的内容何时被认为是过时的。优先级高于旧的 |
|
Content-Type | 描述了返回给客户端的资源的数据类型。它帮助客户端正确地解释和显示接收到的数据。CDN使用这个头信息来处理对应的数据类型以及如何传输它们。 |
|
Expires | 提供了一个具体的日期/时间,这个时间点之后资源被认为是过期的。CDN使用这个头来确定资源是否仍然有效,如果过期,CDN将回源请求新的资源。 |
|
Last-Modified | 表示资源最后一次被修改的时间。CDN和浏览器使用这个响应头来判断自从该资源上次被缓存后是否有被修改过。 |
|
配置示例
示例一:配置响应文档属于某种MIME类型
配置场景
如果您希望配置响应文档属于某种MIME类型。
MIME类型主要包含以下几类:
文本类型:包括文本文件(例如.txt、.csv)和HTML文件(例如.html、.htm、.shtml)。
图片类型:包括常见的图片文件(例如.jpg、.png、.gif)。
音频类型:包括音频文件(例如.mp3、.wav)。
视频类型:包括视频文件(例如.mp4、.avi)。
应用程序类型:包括应用程序文件(例如.pdf、.doc、.xls)。
配置方法
响应头操作:增加
自定义响应头名称:Content-Type。
响应头值:text/html。
结果说明:在源站发送给CDN节点的响应信息中声明内容类型为text/html,再次配置将覆盖旧值。
示例二:删除响应头信息
配置场景
如果您希望删除响应头信息。
配置方法
响应头操作:删除
自定义响应头名称:Content-Type。
结果说明:删除请求头中的Content-Type信息,然后返回给用户。
如果同时完成了示例一和示例二,那么会先增加响应头Content-Type信息(响应的内容属于text/html类型),然后删除该请求头,最终结果为:响应的资源没有MIME类型限制,直接以最初的类型返回用户。