断点续传(请求头&响应头)

首先我们来理解一下断点续传的概念是什么
断点续传(分块传输):以前用户不能使用高速的带宽访问互联网,下载东西的时候如果遇到网络中断,则下载失败,需再次重新开始,效率低下。为解决上述问题,需要一种可以恢复的机制,恢复是指能从之前下载中断处恢复下载。

要实现该功能,发起请求时需要指定下载的实体范围,像这样的请求我们称之为范围请求(Range-Request)。举个简单的例子,我们现在要请求一份10000字节大小的资源,我们可以分成1-5000,5001-10000两块去请求两次。

1997年1月公布的HTTP1.1(RFC2616)是目前主流的HTTP协议版本,为断点续传提供了技术支持,此前的HTTP协议均不支持断点续传。通过在Header里面的两个参数进行实现,**客户端发送请求对应的是Range,服务器端响应请求对应的是Content-Range。**针对范围请求,响应会返回状态码为206 Partial Content 的响应报文,另外,对于多重范围的范围请求,响应会在首部字段Content-Type 标明multipart/byteranges 后返回响应报文,如果服务器无法范围范围请求,则会返回状态码200 OK和完整的实体内容。

Range :(unit=first byte pos)-[last byte pos]
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 同时指定几个范围

Content-Range:bytes (unit first byte pos) - [last byte pos]/[entity legth]
bytes代表当前发送的文件大小范围,entity legth代表当前请求的文件总大小
Content-Range: bytes 0-499/22400表示发送第第 0-499 字节范围的内容,文件的总大小为22400字节

继续拿之前举的例子:我们现在要请求一份10000字节大小的资源图片,我们可以分成1-5000,5001-10000两块去请求两次。

请求头如下:
GET /tip.jpg HTTP/1.1
Host: www.usagidesign.jp (Host代表我们请求的主机名,这里不做过多解释)
Range: bytes = 0-5001

响应头如下:
HTTP/1.1 206 Partial Content
Date: Wed, 04 Jul 2012 07:28:03 GMT (Date代表响应时间)
Content-Range: bytes 0-5001/10000
Content-Length:5000 (Content-Length代表该资源的大小)
Content-Type:image/jpg (Content-Type代表该资源的类型)

如何判断一个服务器是否支持断点续传
linux:$ curl -I ‘url’
看返回的HTTP头信息,如果有Accept-Ranges: bytes,则表示服务器支持。如果是Accept-Ranges: none,则表示不支持。

你可能感兴趣的:(断点续传(请求头&响应头))