人们下载文件时断网重连之后,需要一种可恢复的机制。所谓恢复是指能从之前下载中断处恢复下载。
要实现该功能需要指定下载的实体范围。像这样,指定范围发送的请求叫做范围请求(Range Request)。基于范围请求也可实现多线程分片下载。
只有双端(客户端和服务器端)都支持HTTP/1.1才能使用范围请求。
1.范围请求的请求报文
在HTTP/1.1的请求报文中,有一个首部字段Range
来指定请求资源的byte范围。
范围请求报文示例:
GET /tip.jpg HTTP/1.1
Host: www.baidu.com
Range: bytes =5001-10000
想要继续下载后边的字节在请求头加Ranges:bytes=10000-
即可。
byte范围指定形式如下:
- 5001-10000:指定开始和结束的范围
- 5001- :指定开始区间,表示从5001字节之后的所有内容
- -3000:指定结束区间,表示从一开始到3000字节
- -3000, 5001-:表示多重范围
2.范围请求的响应报文
针对范围请求,通过响应头Accept-Ranges:bytes
表示当前资源支持范围请求,响应会返回状态码为206 Partial Content
的响应报文。针对请求报文中的Range字段,响应报文中也又响应的字段Content-Range
来标记响应的实体内容范围。