Range
用法
Range 头部支持对资源进行部分获取。客户端包含该头部即可请求特定的字节范围,而无需下载整个资源。这对于恢复中断的下载、支持拖动定位的流媒体播放,以及以并行分段方式加载大文件都至关重要。
在发送范围请求之前,客户端会通过检查先前响应中的 Accept-Ranges 头部来确认服务器是否支持。值为 bytes 表示服务器可处理字节范围请求。值为 none 表示服务器不接受范围请求。
当范围请求成功时,服务器会以 206 Partial Content 响应,并包含 Content-Range 头部,指明字节位置和资源总大小。单个请求中包含多个范围时,会产生一个多部分响应,每一部分都携带各自的 Content-Range 和 Content-Type 头部。
如果所请求的范围超出资源边界,服务器会返回 416 Range Not Satisfiable。在某些情况下,服务器会完全忽略 Range 头部,以 200 状态返回完整资源。
unit
unit 指定范围的度量单位。bytes 是 HTTP 规范中定义的标准单位。自定义范围单位是允许的,但很少使用。
range-start 和 range-end
range-start 值是范围起始处基于零的字节偏移量(必填)。range-end 值是范围结束处基于零的字节偏移量(可选)。省略 range-end 表示请求从 range-start 到资源末尾的所有字节。
suffix-length
suffix-length 形式请求资源的最后 N 个字节。格式 -N 无需知道资源总大小即可获取最后 N 个字节。
示例
客户端请求一个大图像文件的前 1,000 个字节。服务器以 206 Partial Content 响应,并在 Content-Range 头部中指明字节范围和文件总大小。
GET /photo.jpg HTTP/1.1
Host: cdn.example.re
Range: bytes=0-999
HTTP/1.1 206 Partial Content
Content-Type: image/jpeg
Content-Length: 1000
Content-Range: bytes 0-999/250000
客户端从第 50,000 字节开始恢复下载。省略结束值表示请求从给定偏移量到资源末尾的全部内容。
Range: bytes=50000-
客户端请求文件的最后 500 个字节。当客户端不知道文件总大小时,后缀形式很有用。
Range: bytes=-500
客户端在单个请求中请求两个独立的字节范围。服务器返回一个多部分响应,每个分段作为独立的正文部分。
Range: bytes=0-499, 1000-1499