** HTTP分片下载技术 **
文章目录
- HTTP中Range字节范围
HTTP中Range字节范围
参考文档:
- HTTP字节范围 w3.org
- HTTP字节范围 httpwg.org
“字节”范围单位用于表示表示数据八位字节序列的子范围。每个字节范围都表示为某个偏移量的整数范围,相对于表示数据的开头(int-range)或结尾(suffix-range)。字节范围不使用other-range说明符。
字节整数范围内的first-pos值给出范围内第一个字节的偏移量。last -pos值给出范围内最后一个字节的偏移量;也就是说,指定的字节位置包括在内。字节偏移量从零开始。
如果表示数据应用了内容编码,则每个字节范围都是根据编码的字节序列计算的,而不是根据解码后获得的底层字节序列计算的。
字节范围说明符的示例:
-
前 500 个字节(字节偏移量 0-499(含)):
bytes=0-499
-
第二个 500 字节(字节偏移量 500-999(含)):
bytes=500-999
客户端可以在不知道所选表示的大小的情况下限制请求的字节数。 如果last-pos值不存在,或者该值大于或等于表示数据的当前长度,则字节范围将被解释为表示的剩余部分(即,服务器将last-pos的值替换为比所选表示的当前长度小一的值)。
客户端可以使用后缀范围引用所选表示的最后 N 个字节(N > 0)。如果所选表示短于指定的后缀长度,则使用整个表示。
附加示例,假设表示长度为 10000:
-
最后 500 个字节(字节偏移量 9500-9999(含)):
bytes=-500
或者:
bytes=9500-
-
仅第一个和最后一个字节(字节 0 和 9999):
bytes=0-0,-1
-
前1000个字节、中间1000个字节、后1000个字节:
bytes=0-999、4500-5499、-1000
-
第二个 500 个字节(字节偏移量 500-999(含))的其他有效(但非规范)规范:
bytes=500-600,601-999
bytes=500-700,601-999
对于GET请求,如果满足以下任一条件,则有效字节范围规范是可满足的:
- 一个int-range,其first-pos小于所选表示的当前长度,或者
- 具有非零后缀长度的后缀范围。
当选定的表现形式具有零长度时, GET请求中range-spec的唯一可满足形式是具有非零suffix-length 的suffix-range。
在字节范围语法中,first-pos、last-pos和suffix-length以八位字节的十进制数表示。由于内容长度没有预定义限制,接收者必须预见到可能很大的十进制数字,并防止由于整数转换溢出而导致解析错误。