本文档介绍如何在CDN加速服务中的 "Range 回源设置" 功能。在大文件下载、流媒体播放等场景中,开启 Range 回源能够有效提升文件的分发效率,降低CDN加速服务的回源流量、减轻源站的压力。
Range 请求指的是那些包含了 Range 请求头的 HTTP 请求。该请求头指定了请求的文件范围,表示请求的是文件的一个分片,而非整个文件。例如,Range:bytes=0-149
表示请求的是文件前 150 字节。如果 Range 请求成功,服务器的响应状态码是 206。
假设CDN加速服务在收到一个用户请求时就判定请求文件无需缓存。例如,在匹配该用户请求的缓存规则中,配置的缓存过期时间是 0 秒。在这个情况下,无论 Range 回源是否开启,CDN加速服务会将用户请求透传到源站,并将源站响应返回给用户。
如果源站不支持 Range 请求,开启 Range 回源后,回源请求可能会失败。
未开启 Range 回源时,无论用户请求是否为 Range 请求,CDN加速服务会向源站请求完整的文件。在CDN加速服务收到源站响应后,有以下两种情况:
CDN加速服务基于缓存规则判定请求文件无需缓存。在这个情况下,CDN加速服务会额外将用户请求透传到源站,并将源站响应返回给用户。
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加速服务的行为:
响应状态码是 200。
在这个情况下,源站响应中包含了完整文件。CDN加速服务将用户请求的文件返回给用户。
响应状态码是 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
。
响应状态码是 416。有以下两种情况:
基于 状态码缓存 规则,CDN加速服务判定该状态码无需缓存。在这个情况下,CDN加速服务会额外将用户请求透传到源站,并将源站响应返回给用户。
基于状态码缓存规则,CDN加速服务判定该状态码需要缓存。在这个情况下,CDN加速服务对用户请求响应 416 状态码。
说明
416 状态码表示 Range 请求失败,常见原因如下:
Range:bytes=1400000-1500000
。在这个情况下,CDN加速服务向源站发送的第一个 Range 请求的文件范围是 Range:bytes=1048576-2097151
。该范围超出了完整文件的大小。Range:bytes=1600000-2000000
。该范围超出了完整文件的大小。响应状态码不是 200、206、416。
在这个情况下,CDN加速服务会额外将用户请求透传到源站,并将源站响应返回给用户。
您已经添加域名到CDN加速服务。相关操作,请参见添加域名。
登录多云CDN控制台。