分片回源怎么工作
对音视频与大文件,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-Ranges | bytes | 缺失或 none 表示不支持分片 |
| 下载字节数 | 与请求范围一致 | 明显超出说明整包返回 |
源站对动态生成的内容通常不支持 Range,此时分片回源会退化为重复整包回源,回源流量被明显放大。
分片粒度与缓存粒度不匹配时,边缘会频繁回源小块内容;切片较大的音视频文件要确认切分与缓存策略协调。
预热与首播速度
大文件的起播时间取决于前几个分片的回源速度。热门内容上架前做一次预热,把启动阶段的回源压力提前消化掉,首播卡顿会明显减少。