Android 开发收集Android开发经验谈Android技术知识

多线程下载,断点续传技术要点---Http Header

2018-01-08  本文已影响126人  姜康

涉及到的Header


Accept-Ranges:

表示自身支持范围请求(partial requests),字段的具体值用于定义范围请求的单位。当客户端发现Accept-Ranges时,可以尝试继续中断了的下载,而不是重新下载。

语法:

Accept-Ranges: bytes
Accept-Ranges: none

具体值有两种,一个是none,一个是bytes,none表示不支持任何范围请求单位,等同于没有这个header,因此很少使用;bytes表示请求的单位是bytes(字节)。

例子:

Accept-Ranges: bytes
Range

一个请求Header,告知服务器返回文件的哪一部分。在一个 Range Header中,可以一次性请求多个部分,服务器会以 multipart 文件的形式将其返回。

语法:

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>

说明:

<unit>:范围所采用的单位,通常是字节(bytes)。
<range-start>:一个整数,表示在特定单位下,范围的起始值。
<range-end>:一个整数,表示在特定单位下,范围的结束值。这个值是可选的,如果不存在,表示此范围一直延伸到文档结束。

例子:

Range: bytes=200-1000, 2000-6576, 19000-
If-Range

一个HTTP 请求头字段,用来使得 Range 头字段在一定条件下起作用

If-Range 字段通常用于断点续传的下载过程中,用来自从上次中断后,确保下载的资源没有发生改变

语法:

If-Range: <星期>, <日> <月> <年> <时>:<分>:<秒> GMT
If-Range: <etag>

说明:

<etag>:一个资源标签(entity tag)代表着所请求的资源。它是由被双引号包围的ACSII 编码的字符串组成的(例如"675af34563dc-tr34")。当应用弱匹配算法时,E-Tag会有一个 W/ 前缀。
<星期>:"Mon","Tue","Wed","Thu","Fri","Sat"或者"Sun"当中的一个(大小写敏感)。
<日>:两位数字,例如"04"或者"23"。
<月>
:"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov",或者"Dec"中的一个(大小写敏感)
<年>:四位数字,例如"1990"或者"2016"。
<时>:两位数字,例如"09"或者"23"。
<分>:两位数字,例如"04"或者"59"。
<秒>:两位数字,例如"04"或者"59"。
GMT:格林威治标准时间。HTTP 协议的日期总是要使用GMT,而不是当地时间。

例子:

If-Range: Mon, 08 Jan 2018 09:11:20 GMT

注意:字段值中既可以用 Last-Modified 时间值用作验证,也可以用ETag标记作为验证,但不能将两者同时使用。

Content-Range

响应头Header,显示的是一个数据片段在整个文件中的位置

语法:

Content-Range: <unit> <range-start>-<range-end>/<size>
Content-Range: <unit> <range-start>-<range-end>/*
Content-Range: <unit> */<size>

说明:

<size>:整个文件的大小(如果大小未知则用"*"表示)

例子:

Content-Range: bytes 200-1000/67589

参考以及延伸资料

Http 请求范围

上一篇下一篇

猜你喜欢

热点阅读