首页/网络/协议速查/Content-Range 片段范围
HTTP 头与缓存70 条

Content-Range 片段范围

206 响应中标注本片段在完整资源中的位置与总长;416 时用 bytes */总长 形式告知实际大小。

协议速查网络更新于 2026-10-13

Content-Range 是什么

Content-Range 用于分段传输:在 206 响应里标注本片段在完整资源中的起止字节与资源总长,格式是 bytes 起-止/总长;总长未知时写星号。它同样出现在 416 响应里,形态是 bytes 星号/总长,用来告诉客户端资源的实际大小,方便改小 Range 重新请求。多线程下载器与断点续传都依赖这个头完成拼接。

基本信息

名称Content-Range
作用描述片段位置与资源总长
规范RFC 9110 §14.4
格式bytes 起-止/总长,总长未知用星号
配套状态码206 表示片段,416 表示范围不满足
配套请求头与 Range、If-Range 联合使用

读取片段信息

读取片段信息
curl -si -r 1000-1999 https://download.example.com/f.bin | head -8
# HTTP/1.1 206 Partial Content
# content-range: bytes 1000-1999/1048576
curl -si -r 99999999- https://download.example.com/f.bin | head -5
# HTTP/1.1 416 Range Not Satisfiable
# content-range: bytes */1048576

两种出现场景

状态码Content-Range 形态读法
206bytes 0-999/1048576本片段占 0 到 999 字节,资源共 1048576 字节
416bytes */1048576请求范围不可满足,此处给出实际总长
200通常不出现服务端未按范围响应,返回了完整内容

典型使用场景

  • 断点续传:用上一次拿到的偏移量与总长决定本次请求的 Range
  • 多线程下载:各线程按片段写入同一文件的对应偏移,靠本头对齐
  • 大文件校验:用总长与最终文件大小比对,判断是否拼接完整
  • 限速与分片下载工具排障:确认服务端究竟返回了片段还是整份内容
  • 排查总长变化:说明资源在传输期间被替换,需要重新下载
如果请求了 Range 却收到 200 和完整内容,说明服务端不支持范围请求或忽略了该头,此时不会出现 Content-Range。多线程下载器若不检查这一点,会拼出损坏文件——所以要么确认服务端支持,要么改用单线程下载。还要注意它只是响应里的描述信息,服务端不会依据它做任何校验,因此不能当作完整性校验或安全控制来用;文件是否完整仍需用哈希比对确认。

易错点

  • 多线程拼接时不校验每段的 Content-Range:并发写入错位,最终文件能打开但内容损坏
  • 下载过程中资源被替换导致总长变化,仍按旧偏移续传,拼出前后版本混杂的文件
  • 把 416 当成致命错误直接重试同一 Range,应该先读返回的总长再修正请求范围
  • 认为 206 一定返回完整请求范围:服务端可以只返回其中一部分,需按实际响应继续

数据来源与参考

  • RFC 9110 §14.4 Content-Range

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌