You need to enable JavaScript to run this app.
导航

配置回源 Range

最近更新时间2023.03.30 19:41:28

首次发布时间2022.02.09 10:15:37

本文档介绍如何在火山引擎内容分发网络中对加速域名启用 "回源 Range"。

什么是 Range 请求

Range 请求指的是那些包含了 Range 请求头的请求。Range 请求通知站点返回请求文件的一个分片,而非整个文件。例如,请求头 Range:bytes=0-149 指示请求的是文件的前 150 字节的分片。

如果 Range 请求成功,站点的响应状态码是 206。

启用 "回源 Range" 后,内容分发网络的行为

在您启用 "回源 Range" 后,内容分发网络在向源站发起请求时就会使用 Range 请求。每个 Range 请求中所指定的分片大小是 1 MB,1 MB 是 1,048,576 字节。也就是说,根据实际情况,回源请求的请求头中会包含 Range:bytes=0-1048575bytes=1048576-2097151 或者 bytes=2097152-3145727 等。

说明

  • 如果源站不支持 Range 请求,在开启 "回源 Range" 后,回源请求可能会失败。参见判断源站是否支持 Range 请求

  • 无论是否启用 "回源 Range",内容分发网络始终是可以接收并处理来自用户的 Range 请求的。在收到 Range 请求后,如果 "回源 Range" 未启用,内容分发网络会先向源站请求完整的文件,然后返回用户请求的分片。

在您启用 "回源 Range" 后,假设用户请求您站点上的一个 10 MB 大小的文件。该文件还未被内容分发网络缓存。此时,存在以下几种场景。

用户请求完整文件
在这种情况下,请求中不包含 Range 请求头。此时,内容分发网络会依次向源站发送 10 个 Range 请求。每个请求中所指定的分片大小是 1 MB。在收到所有分片后,内容分发网络将完整的文件发送给用户并缓存这些分片。

用户请求指定分片
在这种情况下,假设请求中包含的 Range 请求头是 Range:bytes=1500000-4000000。此时,内容分发网络会依次向源站发送 3 个 Range 请求。这些请求中所指定的分片分别表示请求文件的 1-2 MB,2-3 MB,3-4 MB 的部分。在收到这 3 个分片后,内容分发网络返回用户请求的那个分片,同时缓存这 3 个分片。

之后,假设另一个用户向您的站点发送了一个请求。请求中包含的 Range 请求头是 Range:bytes=2500000-5000000。此时,内容分发网络只需向源站请求该文件的 4-5 MB 部分的分片。在获取了 4-5 MB 部分的分片后,内容分发网络返回用户请求的分片并缓存 4-5 MB 部分的这个分片。由于有 2 个缓存的分片匹配了用户的请求,该用户请求被认为是缓存命中。

操作步骤

  1. 登录 火山引擎内容分发网络控制台
  2. 在左侧导航栏,点击 域名管理
  3. 域名管理 页面,找到需要配置的域名,点击 管理
    页面上方的筛选条件和搜索框可以帮助您快速找到要配置的域名。
  4. 在页面右上方,点击 回源配置 页签。
  5. 点击 编辑配置
  6. 回源 Range 下方,设置 状态开启
  7. 在页面右上方,点击 提交编辑

alt

更多信息

缓存文件的过期时间

在您启用 "回源 Range" 后,缓存文件的过期时间是基于最早被缓存的那个分片的缓存时间来计算的。

示例
您站点上的一个 10 MB 大小的文件被内容分发网络缓存了以下分片:

  • 3-4 MB:该分片在 9:00 被缓存。

  • 1-2 MB:该分片在 10:00 被缓存。

  • 7-8 MB:该分片在 11:00 被缓存。

假设该文件的缓存 TTL 是 4 小时。

如果内容分发网络在 13:05 收到了一个 Range 请求,请求的分片是该文件的 7-8 MB 部分。此时,内容分发网络判定为缓存过期,并向源站发起文件校验请求。

如何判断源站是否支持 Range 请求

您可以使用 curl 命令向源站发送一个文件请求。如果源站响应头 Accept-Ranges 的值不是 none,表示源站支持 Range 请求。下面是一个示例。

curl -I http://image.example.com/volcano.png
HTTP/1.1 200 OK
...
Accept-Ranges: bytes
Content-Length: 187563

特殊情况下内容分发网络的响应方式

特殊情况一:源站文件不可缓存

在这种情况下,如果用户请求了该文件的分片,内容分发网络从源站获取用户请求的分片,然后就将分片返回给用户,不会缓存该分片。

这里需要留意的是,如果用户的 Range 请求中分片范围的格式是 <start>-<end><start>-,由于内部的机制,内容分发网络还会额外向源站发送两个 Range 请求。这两个 Range 请求中所指定的分片大小都是 1 MB。对于这 2 个请求,内容分发网络不会响应用户任何内容。

说明

如果以下所有条件都满足,内容分发网络不会缓存源站的文件:

  • 请求文件的源站响应中不包含 Cache-Control 响应头,或者包含 Cache-Control: no-cacheCache-Control: private 响应头。

  • 内容分发网络中的缓存规则未指示要缓存该文件。

特殊情况二:请求的分片范围与文件没有交集

在这种情况下,内容分发网络响应 416 状态码。例如,请求的分片是 7-8 MB 的部分,而文件本身的大小是 6 MB。

特殊情况三:请求的分片范围与文件有交集

在这种情况下,内容分发网络返回交集的部分。例如,请求的分片是 5-8 MB 的部分,而文件本身的大小是 6 MB。此时,内容分发网络返回该文件的 5-6 MB 部分的分片。