Tips HTTP Range

range 的常见流程

  1. 客户端发起 get,不带 range
  2. 服务器返回内容,带有 Accept-Ranges: bytes
  3. 客户端知晓服务端支持 range,可使能当前任务的暂停功能,继续时使用 range 跳过已下载部分
  4. 若客户端带有 Range: bytes=0-100 则服务端带有 Content-Range: bytes 0-100/100000

http range 请求,是 http 的可选实现功能,服务器/客户端均可不实现此功能。

http range 目的是实现断点续传,并非用于随机访问的场景,也有基于 http range 构造的 DoS 攻击,原理是构造跨度较大的 http range 请求以提高服务器准备数据的代价,http 服务器应防备这一点,对不合理的 range 请求进行拒绝,不过这可能误伤部分所谓的多线程下载软件,这些软件往往可选的使用多个 TCP 连接同时下载文件的不同部分。

部分防火墙屏蔽下载的原理是识别并拒绝Range: bytes=n-x的 http 请求