首页/网络/协议速查/416 Range Not Satisfiable 范围不可满足
HTTP 方法与状态码91 条

416 Range Not Satisfiable 范围不可满足

Range 请求的区间无效或超出资源长度;响应应带 Content-Range: bytes */总长度 告知实际大小。

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

416 是什么

416 Range Not Satisfiable 表示请求的字节区间无法满足:区间起点超出资源当前长度、区间语法非法,或资源被替换后长度发生变化(RFC 9110 §15.5.17)。按规范,服务器在拒绝时应返回 Content-Range: bytes */总长度,把资源真实大小告诉客户端,让下载器重新对齐区间后继续。

基本信息

名称416 Range Not Satisfiable
类别4xx(客户端请求的区间有问题)
规范RFC 9110 §15.5.17
关键响应头Content-Range: bytes */<总长度>
常见触发断点续传时文件被替换、截断或内容长度变化
相关头部Range、Accept-Ranges、Content-Range、ETag、If-Range

典型使用场景

  • 断点续传失败排查:下载器按旧长度继续请求,而源文件已更新
  • 静态文件服务(Nginx/Apache)配置核查:确认是否返回 Content-Range 让客户端自我修正
  • CDN 回源与分片缓存:不同节点持有的资源版本不一致导致区间越界
  • 视频拖动进度条异常:播放器请求的字节位置超出媒体实际长度
  • 大文件下载稳定性优化:用 If-Range 加 ETag 保证续传对象没被换过
  • 自动化测试:构造越界 Range 验证服务端是否按规范响应

复现与续传

复现与续传
# 请求远超文件长度的区间 → 416
curl -si -r 99999999- https://download.example.com/file.iso
# HTTP/1.1 416 Range Not Satisfiable
# Content-Range: bytes */1073741824      # 资源真实长度,客户端据此重算区间

# 带条件的续传:资源若被换过就不做部分下载
curl -si -r 52428800- -H 'If-Range: "a1b2c3"' -o part2.bin https://download.example.com/file.iso

Range 相关头部

头部方向读法
Range请求要哪一段,如 bytes=0-1023
Accept-Ranges响应是否支持区间请求,值为 bytes 表示支持
Content-Range响应206 给区间与总长,416 只给总长
If-Range请求带 ETag 或时间:未变返回 206,变了整包返回 200
416 是「重新协商」信号而不是硬失败:客户端拿到总长度后从有效区间重试,通常就能继续下载。
416 响应不应携带实体内容;把总长度放在 Content-Range 里,是让客户端自我修正的关键,缺了它就只剩整包重下一条路。
CDN 分片缓存下不同节点可能持有不同版本,出现间歇性 416 时先清缓存再复现,避免把缓存不一致误判为源站问题。

易错点

  • 下载器忽略 Content-Range、反复用同一区间重试会陷入死循环:必须按总长度重新计算区间
  • 服务端只返回 416 而不带 Content-Range,客户端无从修正,只能整包重下
  • 文件被替换后继续续传会拼出损坏文件(新旧内容混在一起):用 If-Range 或校验 ETag 后再续
  • 把 416 当 404 处理会掩盖区间计算错误,排查时先核对请求的 Range 与资源实际长度

数据来源与参考

  • RFC 9110 §15.5.17 416
  • RFC 9110 §14.2 Range

相关工具

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