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

涉及到的Header

  • Accept-Ranges
  • Range
  • If-Range
  • Content-Range
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 文件的形式将其返回。

  • 如果服务器返回的是范围响应,需要使用 206 状态码(Partial Content)。

  • 假如所请求的范围不合法,那么服务器会返回 416 状态码(Range Not Satisfiable),表示客户端错误。

  • 服务器允许忽略 Range Header,从而返回整个文件,状态码用 200

语法:

Range: =<range-start>-
Range: =<range-start>-<range-end>
Range: =<range-start>-<range-end>, <range-start>-<range-end>
Range: =<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 头字段在一定条件下起作用

  • 当字段值中的条件得到满足时,Range 头字段才会起作用,同时服务器回复206 (部分内容状态码),以及Range 头字段请求的相应部分
  • 如果字段值中的条件没有得到满足,服务器将会返回 200 OK 状态码,并返回完整的请求资源

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 请求范围

你可能感兴趣的:(Android,基础理论,断点续传,多线程下载,Range,Content-Range,If-Range)