HTTP 断点续传
2016-03-10 16:05
357 查看
所谓断点续传,也就是要从文件已经下载的地方开始继续下载。在以前版本的 HTTP 协议是不支持断点的,HTTP/1.1 开始就支持了。一般断点下载时才用到 Range 和 Content-Range 实体头。
Range
用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式:
Range:(unit=first byte pos)-[last byte pos]
Content-Range
用于响应头,指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:
Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth]
请求下载整个文件:
GET /test.rar HTTP/1.1
Connection: close
Host: 116.1.219.219
Range: bytes=0-801 //一般请求下载整个文件是bytes=0- 或不用这个头
一般正常回应
HTTP/1.1 200 OK
Content-Length: 801
Content-Type: application/octet-stream
Content-Range: bytes 0-800/801 //801:文件总大小
If-Range = “If-Range” “:” ( entity-tag | HTTP-date )
IF-Range头部需配合Range,如果没有Range参数,则If-Range会被视为无效。
如 果If-Range匹配上,那么客户端已经存在的部分是有效的,服务器将返回缺失部分,也就是Range里指定的,然后返回206(Partial content),否则证明客户端的部分已无效(可能已经更改),那么服务器将整个实体内容全部返回给客户端,同时返回200OK
1. 如果不满足If-None-Match,也就是任何一个Etag匹配了,那服务器就不会产生该请求的响应(412返回)。除非判断其它条件如If- Modified-Since不成立(也就是since的时间后内容没有更改),那server根据不同的请求方式发出不同的响应头,如果是GET或 HEAD请求,这种情况就要响应304 Not modified,顺便带上cache相关的头信息,特别是匹配上的Etag; 如果是其它请求方式,那就响应412Precondition Failed了
2.如果If-None-Match成立,也就是一个Etag也没匹配,那服务器会忽略任何其它诸如If-Modified-Since的条件,就不能再产生304的响应头了
http://blog.chinaunix.net/uid-11640640-id-3202022.html
Range
用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式:
Range:(unit=first byte pos)-[last byte pos]
Content-Range
用于响应头,指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:
Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth]
请求下载整个文件:
GET /test.rar HTTP/1.1
Connection: close
Host: 116.1.219.219
Range: bytes=0-801 //一般请求下载整个文件是bytes=0- 或不用这个头
一般正常回应
HTTP/1.1 200 OK
Content-Length: 801
Content-Type: application/octet-stream
Content-Range: bytes 0-800/801 //801:文件总大小
If-Range = “If-Range” “:” ( entity-tag | HTTP-date )
IF-Range头部需配合Range,如果没有Range参数,则If-Range会被视为无效。
如 果If-Range匹配上,那么客户端已经存在的部分是有效的,服务器将返回缺失部分,也就是Range里指定的,然后返回206(Partial content),否则证明客户端的部分已无效(可能已经更改),那么服务器将整个实体内容全部返回给客户端,同时返回200OK
1. 如果不满足If-None-Match,也就是任何一个Etag匹配了,那服务器就不会产生该请求的响应(412返回)。除非判断其它条件如If- Modified-Since不成立(也就是since的时间后内容没有更改),那server根据不同的请求方式发出不同的响应头,如果是GET或 HEAD请求,这种情况就要响应304 Not modified,顺便带上cache相关的头信息,特别是匹配上的Etag; 如果是其它请求方式,那就响应412Precondition Failed了
2.如果If-None-Match成立,也就是一个Etag也没匹配,那服务器会忽略任何其它诸如If-Modified-Since的条件,就不能再产生304的响应头了
http://blog.chinaunix.net/uid-11640640-id-3202022.html
相关文章推荐
- 简约之美Jodd-http--深入源码理解http协议
- HttpClient连接池的三篇文章
- httpclient http连接池 源码阅读
- httpclient post 中文问题
- htmlunit 模拟登陆 https
- 使用HttpClient发送Post Http请求
- HttpClient连接池原理及一次连接时序图
- 几种通讯协议的比较RMI > Httpinvoker >= Hessian >> Burlap >> web service
- HttpAsyncClient的连接池使用
- http连接池使用 参数
- httpclient http连接池 demo
- HttpURLConnection超时处理
- HTTP POST GET 本质区别详解 (转)
- 使用异步HTTP提升客户端性能(HttpAsyncClient)
- Java异步HTTP请求
- 转自: http://blog.csdn.net/xiaxiaorui2003/article/details/3838631
- 网络爬虫(网络蜘蛛)之网页抓取
- HttpTunnel技术介绍
- http-关于application/x-www-form-urlencoded等字符编码的解释说明
- HttpClient 4.3.3 cookie rejected的解决办法