HTTP断点续传,阿里云断点续传

1,350 阅读3分钟

一,HTTP断点续传

1,关于HTTP断点续传,看这个博客,讲的清晰明了

www.cnblogs.com/findumars/p…

2,通过上面的博客,我们可以了解到4个概念或字段

I: Range,用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式如下:

Range: bytes=0-499 表示第 0-499 字节范围的内容

Range: bytes=500-999 表示第 500-999 字节范围的内容

Range: bytes=-500 表示最后 500 字节的内容  

Range: bytes=500- 表示从第 500 字节开始到文件结束部分的内容

Range: bytes=0-0,-1 表示第一个和最后一个字节

Range: bytes=500-600,601-999 同时指定几个范围

II: Content-Range,用于响应头中,在发出带 Range 的请求后,服务器会在 Content-Range 头部返回当前接受的范围和文件总大小,一般格式如下:

Content-Range: bytes 0-499/22400

III: 状态码,206指服务器响应断点,200指服务器未响应断点

IV: Content-Length,服务器返回的数据的字节长度

二,一个支持断点续传的请求如下图:(Content-Length:27711597,即文件长度=27711597)

uc-1.png

图1中,

Range:bytes=0-7

status:206

Content-Length:8

Content-Range:bytes 0-7/27711597

表示断点续传,服务器返回了从0-7的字节长度

uc-2.png 图2中,

Range:bytes=27711590-27711597

status:206

Content-Length:7

Content-Range:bytes 27711590-27711596/27711597

表示断点续传,服务器返回了从27711590-27711596的字节长度

三,阿里云断点续传(Content-Length:69397,即文件长度=69397)

这里指的是通过一个阿里云的http地址,下载文件,而不是通过阿里云提供的sdk下载文件

ali-1.png 图3中,

Range:bytes=0-7

status:206

Content-Length:8

Content-Range:bytes 0-7/69397

表示断点续传,服务器返回了从0-7的字节长度

ali-2.png 图4中,

Range:bytes=69390-69397

status:200

Content-Length:69397

Content-Range:未返回

表示未断点续传,服务器返回了69397的字节长度,即文件的总长度

四,结论

问题1:阿里云图4请求,为什么请求头Range:bytes=69390-69397,响应的code=200,而不是206呢?

问题2:另一个支持断点的图2中,请求头Range:bytes=27711590-27711597,响应的code=206呢?

答1:阿里云官网说,请求头Range大于文件内容,则不按断点续传处理,直接返回200。

答2:另一个支持断点的图2中,可能是兼容性做的比较好,即使请求头Range大于文件内容,依然会返回后半部分数据。

最终结论:对于阿里云的这个文件,虽然文件的内容总长度是69397,我们却需要传Range:bytes=69390-69396(即结尾处是69397-1),或者传Range:bytes=69390-;(即只传开始,不传结束,这样也可以)