HTTPQUERY
English

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 响应会同时使用这两个头。