范围
Range
HTTP 请求头指示服务器应返回资源的哪些部分。可以在一个 Range
头中同时请求多个部分,服务器可能会在一个多部分文档中返回这些范围。如果服务器返回范围,它将使用 206 Partial Content
状态代码作为响应。如果范围无效,服务器将返回 416 Range Not Satisfiable
错误。
不支持范围请求的服务器可能会忽略 Range
头,并使用 200
状态代码返回整个资源。忽略 Range
头等效于 Accept-Ranges: none
,因此 Accept-Ranges
响应头很少用于此目的。
目前,只有 bytes
单位已注册,它们是偏移量(从零开始并包含)。如果请求的数据应用了 内容编码,则每个字节范围表示编码的字节序列,而不是解码后获得的字节。
当指令指定单个字节范围时,该头是 CORS 安全列表请求头。
语法
Range: <unit>=<range-start>-
Range: <unit>=<range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>, <range-start>-<range-end>
Range: <unit>=-<suffix-length>
指令
- <unit>
-
指定范围的单位。
- <range-start>
-
以给定单位表示的整数,指示请求范围的起始位置。
- <range-end>
-
以给定单位表示的整数,指示请求范围的结束位置。此值是可选的,如果省略,则使用资源的末尾作为范围的结束位置。
- <suffix-length>
-
指示要返回的资源末尾的单位数的整数。
示例
以下示例展示了如何使用 Range
头进行 CORS 安全列表请求以及请求多个范围。其他示例可以在 HTTP 范围请求 指南中找到。
单个字节范围和 CORS 安全列表请求
当值为单个字节范围时,Range
头是 CORS 安全列表请求头。这意味着它可以在跨源请求中使用,而不会触发 预检 请求,这对于请求媒体和恢复下载非常有用。
以下示例请求资源的前 500 个字节
Range: bytes=0-499
要请求第二个 500 个字节
Range: bytes=500-999
省略结束位置将请求资源的所有剩余单位,因此可以使用以下方法请求长度为 1000 字节的资源的最后 100 个字节
Range: bytes=900-
或者,如果不知道资源的大小,可以使用后缀范围 -n
请求最后 n
个字节
Range: bytes=-100
请求多个范围
对于长度为 10000 字节的资源,以下示例请求三个单独的范围;200
-999
(800 字节)、2000
-2499
(500 字节),最后是 9500-
。范围说明符值 9500-
省略了结束位置,这表明从 9500 开始的所有字节都是第三个范围的一部分(500 字节)。
Range: bytes=200-999, 2000-2499, 9500-
此示例请求文件的开头 500 字节和结尾 500 字节。如果这些范围重叠(例如,如果请求的资源长度小于 1000 字节),服务器可能会拒绝该请求。
Range: bytes=0-499, -499
规范
规范 |
---|
HTTP 语义 # field.range |
浏览器兼容性
BCD 表格只在启用了 JavaScript 的浏览器中加载。