Accept-Ranges 是什么
Accept-Ranges 是响应头,用来声明服务端对某个资源支持的范围请求单位。值为 bytes 表示支持按字节请求片段,值为 none 表示明确不支持。下载器、测速工具与客户端更新组件据此决定是否启用断点续传与多线程下载,而不必先发一个 Range 请求去试探。
基本信息
| 名称 | Accept-Ranges |
|---|---|
| 作用 | 声明是否支持范围请求 |
| 规范 | RFC 9110 §14.3 |
| 取值 | bytes 或 none |
| 是否必需 | 否,头缺失时需实测判断 |
| 配套响应 | 206 状态码配合 Content-Range 使用 |
响应组合判读
| 响应特征 | 含义 | 处理建议 |
|---|---|---|
| 带 bytes 且 Range 返回 206 | 支持范围请求 | 可启用续传与多线程 |
| 带 none | 明确不支持范围请求 | 改用单连接整体下载 |
| 头缺失但 Range 返回 206 | 实际支持,只是没声明 | 按 206 的实际结果处理 |
| 头缺失且 Range 返回 200 | 忽略范围,返回完整内容 | 不要按偏移写入 |
检测续传支持
检测续传支持
curl -sI https://download.example.com/f.bin | grep -i accept-ranges
# accept-ranges: bytes → 支持断点续传
# accept-ranges: none → 不支持
curl -si -r 0-99 https://download.example.com/f.bin | head -5 # 实测确认典型使用场景
- 发布系统与大文件分发:确认客户端能否断点续传,决定失败重试策略
- 测速工具对接:部分工具依据该头选择分片下载方式
- CDN 回源配置核查:确认边缘与源站对范围请求的支持是否一致
- 客户端更新组件开发:把「不支持续传」作为一条明确的降级路径处理
- 排障下载失败:区分是服务端不支持范围请求,还是客户端使用方式有误
同一站点上静态文件与动态内容的表现常常不同:前者多返回 bytes,后者因为内容边生成边发送而返回 none。中间层也可能重写这个头,因此出现「直连源站可以续传、经过 CDN 就不行」这类现象时,应逐层核对响应头,而不是只测一个入口。下载工具读到 none 或实测返回 200 时,应自动降级为单连接下载并重新开始。