HTTP分片下载技术

时间:2024-12-18 09:59:33

** 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以八位字节的十进制数表示。由于内容长度没有预定义限制,接收者必须预见到可能很大的十进制数字,并防止由于整数转换溢出而导致解析错误。