[转]HTTP 断点续传协议头部分析

本文介绍了HTTP/1.1中支持的断点续传功能,详细解释了Range和Content-Range头部的作用及使用方法。Range用于指定下载的起始和结束字节位置,而Content-Range则用于响应中描述数据的范围及其在整个文件中的位置。
摘要由CSDN通过智能技术生成

原文链接:http://blog.csdn.net/wwj_748/article/details/19935699?utm_source=itdadao&utm_medium=referral

HTTP 断点续传协议头部分析

所谓断点续传,也就是要从文件已经下载的地方开始继续下载。在以前版本的 HTTP 协议是不支持断点的,HTTP/1.1 开始就支持了。一般断点下载时才用到RangeContent-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:文件总大小
206 Partial Content http://xxx/nhl-girls.jpg (107ms)
Last-Modified: Tue, 29 Nov 2016 10:22:03 GMT
ETag: "131c85-5426df59b08c0"
Accept-Ranges: bytes
Content-Length: 252485
Content-Range: bytes 1000000-1252484/1252485
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: image/jpeg

If-Range = “If-Range” “:” ( entity-tag | HTTP-date )

IF-Range头部需配合Range,如果没有Range参数,则If-Range会被视为无效。

如果If-Range匹配上,那么客户端已经存在的部分是有效的,服务器将返回缺失部分,也就是Range里指定的,然后返回206(Partial content),否则证明客户端的部分已无效(可能已经更改),那么服务器将整个实体内容全部返回给客户端,同时返回200 OK

  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的响应头了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值