云 DNS 与 CDN49 条

Range 分片回源

对音视频与大文件,CDN 用 Range 请求分片回源:只拉取缺失片段并按块缓存拼接。源站需支持 Range 并正确返回 206 与 Content-Range,否则大文件只能整体回源,播放启动与拖拽体验变差。

分片回源怎么工作

对音视频与大文件,CDN 边缘节点用 Range 请求向源站分片拉取内容:只取缺失的分片,按块缓存并在边缘拼接。这样大文件不必整包回源,源站带宽与首播时间都能明显下降。前提是源站支持 Range,并正确返回 206 状态码与 Content-Range 头;否则分片回源会退化成反复整包回源。

基本信息

工作机制边缘按 Range 拉取缺失分片,按块缓存与拼接
源站要求支持 Range 请求,返回 206 与 Content-Range
收益大文件不必整包回源,节省源站带宽、缩短首播时间
适用内容视频、音频、安装包、镜像等大文件
验证方式带 Range 头直连源站与经 CDN 请求各验证一次

典型使用场景

  • 点播视频拖动进度条,需要按分片拉取而不是整片下载
  • 大文件下载被中断后支持续传,减少重复流量
  • 多清晰度视频首次播放时按需加载前几片,加快起播
  • 镜像站与软件分发分发大体积安装包
  • 排查大文件回源流量异常升高,确认 Range 是否生效

检查 Range 支持情况

检查 Range 支持情况
# 直连源站:期望看到 206 与 Content-Range
curl -sI -H 'Range: bytes=0-1023' https://origin.example.com/video.mp4 | grep -E 'HTTP/|Content-Range|Accept-Ranges'
# 经 CDN 请求同一片段,核对返回码与下载字节数
curl -o /dev/null -r 0-1023 -w 'code=%{http_code} size=%{size_download}\n' https://cdn.example.com/video.mp4

响应头读法

响应项正常值异常含义
状态码206 Partial Content返回 200 说明源站忽略 Range
Content-Range标注起止与总长度缺失说明未按分片响应
Accept-Rangesbytes缺失或 none 表示不支持分片
下载字节数与请求范围一致明显超出说明整包返回
源站对动态生成的内容通常不支持 Range,此时分片回源会退化为重复整包回源,回源流量被明显放大。
分片粒度与缓存粒度不匹配时,边缘会频繁回源小块内容;切片较大的音视频文件要确认切分与缓存策略协调。

预热与首播速度

大文件的起播时间取决于前几个分片的回源速度。热门内容上架前做一次预热,把启动阶段的回源压力提前消化掉,首播卡顿会明显减少。

易错点

  • 源站不支持 Range,拖动播放反复触发整包回源,源站带宽被吃满
  • 切片大小与缓存粒度不匹配,边缘频繁回源小块内容
  • 只验证了 CDN 侧返回 200,没有核对是否真的按分片返回 206
  • 回源协议或端口配置不一致,Range 请求在中间层被改写,分片能力失效

数据来源与参考

  • 阿里云 CDN 分片回源文档
  • 华为云 CDN 回源机制介绍
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌