request header

Range: <unit>=<range-start>-
Range: <unit>=<range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>, ...

Range 是一个请求首部,值是一个或多个 范围,告知服务器返回文件的哪一部分

  1. 如果是请求单个范围,服务器返回 206 Partial Content
  2. 如果请求多个范围,服务器会以 multipart 文件的形式将其返回
  3. 如果请求的范围不合法,服务器返回 416 Range Not Satisfiable
  4. 服务器允许忽略 Range 首部从而返回整个文件(比如服务器不支持分段下载),状态码用 200

response header (206)

206 Partial Content 表示请求已成功,并且主体包含所请求的数据区间,该数据区间是在请求的 Range 首部指定的

  1. 如果只包含一个数据区间,那么整个响应的 Content-Type 首部的值为所请求的文件的类型,同时包含 Content-Range 首部
  2. 如果包含多个数据区间,那么整个响应的 Content-Type 首部的值为 multipart/byteranges,其中一个片段对应一个数据区间,并提供 Content-RangeContent-Type 描述信息
Content-Range: <unit> <range-start>-<range-end>/<size>
Content-Range: <unit> <range-start>-<range-end>/*
Content-Range: <unit> */<size>

应用

多线程下载、分布式下载

  1. 发送 Head 请求确定服务端是否支持 Range 以及确定文件 Content-Length
  2. 划分不同的下载任务