涉及到的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: <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 头字段在一定条件下起作用:
- 当字段值中的条件得到满足时,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
网友评论