Content-Range
用法
当服务器通过仅交付资源的一部分来满足 Range 请求时,Content-Range 头会出现在 206 Partial Content 响应中。该头指定部分内容的字节范围以及完整资源的总大小。
范围请求可实现高效下载。在大文件传输过程中被中断的客户端可以从连接断开处恢复,而无需重新开始。媒体播放器使用范围请求定位到音频或视频文件中的特定位置,而无需下载整个流。
服务器通过 Accept-Ranges 头(通常设为 bytes)声明对范围请求的支持。当范围请求要求的字节范围超出资源边界时,服务器返回 416 Range Not Satisfiable,并包含一个显示资源实际大小的 Content-Range 头。
其语法遵循一种结构化格式,由三个部分组成:单位(几乎总是 bytes)、字节范围以及完整大小。
Content-Range: <unit> <range-start>-<range-end>/<size>
unit
范围的单位类型。bytes 是唯一被广泛实现的单位。
range-start
一个从零开始的整数,表示返回范围的第一个字节。
range-end
一个从零开始的整数,表示返回范围的最后一个字节(包含在内)。
size
完整资源的总字节大小。当总长度未知时(如流式或动态生成的内容),用星号(*)替代大小。
示例
客户端从总大小为 65,000 字节的文件的第 1000 字节处恢复下载。服务器返回第 1000 到 2000 字节(含)。
Content-Range: bytes 1000-2000/65000
一个流式资源在不知道总大小的情况下交付某个范围。星号表示完整长度未知。
Content-Range: bytes 1000-2000/*
服务器因请求的字节超出资源大小而拒绝范围请求。响应携带 416 Range Not Satisfiable 状态并报告实际大小。
HTTP/1.1 416 Range Not Satisfiable
Content-Range: bytes */50000
一个多部分范围响应在单个响应中交付多个范围。每个部分在 multipart/byteranges 消息体中都包含自己的 Content-Range 头。
HTTP/1.1 206 Partial Content
Content-Type: multipart/byteranges; boundary=BOUNDARY
--BOUNDARY
Content-Type: text/plain
Content-Range: bytes 0-499/10000
[first 500 bytes]
--BOUNDARY
Content-Type: text/plain
Content-Range: bytes 9500-9999/10000
[last 500 bytes]
--BOUNDARY--
注意
Content-Length 表示消息体的总字节大小。Content-Range 标识当前响应包含完整资源中的哪个具体字节段。完整响应仅使用 Content-Length;而 206 Partial Content 响应会同时使用这两个头。