You need to enable JavaScript to run this app.
导航
Range 回源设置
最近更新时间:2025.03.07 14:12:46首次发布时间:2024.12.11 10:47:58
我的收藏
有用
有用
无用
无用

本文档介绍如何在CDN加速服务中的 "Range 回源设置" 功能。在大文件下载、流媒体播放等场景中,开启 Range 回源能够有效提升文件的分发效率,降低CDN加速服务的回源流量、减轻源站的压力。

Range 请求

Range 请求指的是那些包含了 Range 请求头的 HTTP 请求。该请求头指定了请求的文件范围,表示请求的是文件的一个分片,而非整个文件。例如,Range:bytes=0-149 表示请求的是文件前 150 字节。如果 Range 请求成功,服务器的响应状态码是 206。

注意事项

  1. 假设CDN加速服务在收到一个用户请求时就判定请求文件无需缓存。例如,在匹配该用户请求的缓存规则中,配置的缓存过期时间是 0 秒。在这个情况下,无论 Range 回源是否开启,CDN加速服务会将用户请求透传到源站,并将源站响应返回给用户。

  2. 如果源站不支持 Range 请求,开启 Range 回源后,回源请求可能会失败。

未开启 Range 回源时的CDN加速服务行为

未开启 Range 回源时,无论用户请求是否为 Range 请求,CDN加速服务会向源站请求完整的文件。在CDN加速服务收到源站响应后,有以下两种情况:

  • CDN加速服务基于缓存规则判定请求文件无需缓存。在这个情况下,CDN加速服务会额外将用户请求透传到源站,并将源站响应返回给用户。

  • CDN加速服务基于缓存规则判定请求文件需要缓存。在这个情况下,

    • 如果回源请求成功,CDN加速服务将用户请求的文件返回给用户。
    • 如果回源请求失败,CDN加速服务将源站响应返回给用户。

开启 Range 回源后的CDN加速服务行为

为提升CDN加速服务缓存的效率,开启 Range 回源后,CDN加速服务在向源站请求一个文件时,会请求文件分片。也就是说,CDN加速服务会向源站发送一个或者多个 Range 请求,每个 Range 请求的分片大小默认是 1 MB。1 MB 就是 1,048,576 字节。

对于CDN加速服务发送的第一个 Range 请求中的文件范围,有以下情况:

  • 如果用户请求的是完整文件,该 Range 请求中的文件范围是 Range:bytes=0-1048575

  • 如果用户请求的是文件分片,该 Range 请求中的文件范围的起始位置是用户请求中文件范围的起始位置向下取整。例如,用户请求中的文件范围是 Range:bytes=2000000-3000000,则CDN加速服务发送的第一个 Range 请求中的文件范围是 Range:bytes=1048576-2097151

CDN加速服务会根据源站对第一个 Range 请求的响应状态码来决定后续行为。以下是不同状态码下CDN加速服务的行为:

  1. 响应状态码是 200。
    在这个情况下,源站响应中包含了完整文件。CDN加速服务将用户请求的文件返回给用户。

  2. 响应状态码是 206。有以下两种情况:

    • 基于缓存规则,CDN加速服务判定请求文件无需缓存。在这个情况下,CDN加速服务会额外将用户请求透传到源站,并将源站响应返回给用户。

    • 基于缓存规则,CDN加速服务判定请求文件需要缓存。在这个情况下,源站响应中包含了完整文件大小的信息。在CDN加速服务向源站发送最后一个 Range 请求前,CDN加速服务会基于完整文件的大小修正最后一个 Range 请求中文件范围的结束位置,确保文件范围不超过完整文件的大小。
      例如,完整文件的大小是 1.5 MB,用户 Range 请求中的文件范围是 Range:bytes=0-1100000。在这个情况下,CDN加速服务向源站发送的第一个 Range 请求中的文件范围是 Range:bytes=0-1048575。在发送第二个 Range 请求前,CDN加速服务会将该请求中的文件范围修正为 Range:bytes=1048576-1100000

  3. 响应状态码是 416。有以下两种情况:

    • 基于 状态码缓存 规则,CDN加速服务判定该状态码无需缓存。在这个情况下,CDN加速服务会额外将用户请求透传到源站,并将源站响应返回给用户。

    • 基于状态码缓存规则,CDN加速服务判定该状态码需要缓存。在这个情况下,CDN加速服务对用户请求响应 416 状态码。

    说明

    416 状态码表示 Range 请求失败,常见原因如下:

    • 用户 Range 请求中的文件范围未超出完整文件的大小。对于CDN加速服务向源站发送的第一个 Range 请求,该请求分片的大小是 1MB 。由于文件范围的结束位置超过了完整文件的大小,导致该 Range 请求失败。
      例如,完整文件的大小是 1.5 MB,用户 Range 请求中的文件范围是 Range:bytes=1400000-1500000。在这个情况下,CDN加速服务向源站发送的第一个 Range 请求的文件范围是 Range:bytes=1048576-2097151。该范围超出了完整文件的大小。
    • 用户 Range 请求中的文件范围超出了完整文件的大小。
      例如,完整文件的大小是 1.5 MB,用户 Range 请求中的文件范围是 Range:bytes=1600000-2000000。该范围超出了完整文件的大小。
  4. 响应状态码不是 200、206、416。
    在这个情况下,CDN加速服务会额外将用户请求透传到源站,并将源站响应返回给用户。

前提条件

您已经添加域名到CDN加速服务。相关操作,请参见添加域名

操作步骤

  1. 登录多云CDN控制台

  2. 在左侧导航栏,单击 CDN加速
  3. 在CDN加速域名列表找到您的域名,单击域名名称。
  4. 在页面右上方,单击 回源配置 页签。
  5. 单击 编辑配置
  6. Range 回源设置 区域,设置 状态 为启用。
  7. 在页面右上方,单击 提交编辑

alt

阿里云 OSS 兼容配置

假设以下场景:

  • 您的源站是阿里云对象存储(OSS)的存储桶。

  • CDN加速服务向源站发送的 Range 请求中的文件范围超过了完整文件的大小。

在这个场景中,OSS 会响应 200 状态码并返回完整文件。这会导致 OSS 的下行流量增大,可能会触发 OSS 限流,影响回源请求的数据传输速度。

因此,如果您的源站是 OSS 中的存储桶,推荐您为您的加速域名设置 回源 HTTP 请求头x-oss-range-behavior:standard。参见 该头部对于 OSS 行为的影响