Range &Content-Range &Accept-Ranges

http协议从1.1开始支持获取文件的部分内容,这为并行下载以及断点续传提供了技术支持。

如对于一个多线程下载工具,服务器端把文件分割成多个部分,比如4个部分(如文件大小为403个 byte,那么可能的分割方式可以为:0-99 (前100个字节),100-199(第二个100字节),200-299(第三个100字节),300-402(最后103个字节)),然后对应4个线程,客户端每个线程负责下载一个部分。现在的问题是线程3发送一个什么样的请求报文,才能够保证 只请求文件的200-299字节,而不会干扰其他线程的任务。

再有如果一个线程进行上传/下载过程中碰到网络故障,我们希望可以从已经上传/下载的部分开始继续上传/下载未完成的部分,而没有必要从头开始上传/下载??梢越谑∈奔洌屯缱试?。

HTTP1.1中上述问题的解决方法是通过在请求/响应的Header里设置参数实现的,客户端发请求时对应的是Range,服务器端响应时对应的是Accept-Ranges、Content-Range。

如果Server支持分段下载,那么在客户端请求资源之前,首先要告诉客户端,它支持Range,之后客户端才可能发起带Range的请求。如在如下一个页面中下载某个资源的时候,

server 主动告诉 client “Accept-Ranges: bytes”。

Server通过请求头中的Range:bytes=xxx-xxx(xxx-xxx表示字节范围,字节数从0开始计数)来判断是否是做Range请求,如果这个值存在而且有效,则只发回请求的那部分文件内容,响应的状态码变成206,表示Partial Content,并设置Content-Range。如果无效,则返回416状态码,表明Request Range Not Satisfiable,如果不包含Range的请求头,则继续通过常规的方式响应。

如用curl工具模拟在该页面中下载某一资源(http://swf.ishare.down.sina.com.cn/7edhKNThu1.jpg)的一次分段请求,请求时把respons的header给dump到一个文件里:

[root@localhost~]# curl -D "rsp.txt" -H "Range:bytes=0-184697""http://swf.ishare.down.sina.com.cn/7edhKNThu1.jpg?ssig=tpNfKjRHRO&Expires=1567278916&KID=sina,ishare">> test.png

? % Total???% Received % Xferd? AverageSpeed?? Time??? Time????Time? Current

???????????????????????????????? Dload? Upload??Total?? Spent??? Left?Speed

100? 180k?100? 180k??? 0????0?? 939k????? 0 --:--:-- --:--:-- --:--:--? 939k

[root@localhost~]#

?????? 上述的意思就是将前184698字节的数据下载下来。

现在看一下这个资源片段的大小

[root@localhost~]# ll | grep test.jpg

-rw-r--r--? 1 root???root???? 184698 Jul 12 19:15test.jpg

?????? 可以看出本次下载的资源大小为184698字节。

?????? 查看一下响应头,如

[root@localhost~]# cat rsp.txt

HTTP/1.1 206 Partial Content

Date:Fri, 12 Jul 2019 11:15:59 GMT

Content-Type:application/octet-stream

Content-Length: 184698

Connection:keep-alive

Server:nginx/1.6.0 r19071115-afb7a4e

X-RequestId:00a6a1df-1907-1218-5024-782bcb648fb2

X-Requester:SINA0000000000ISHARE

Last-Modified:Mon, 25 Sep 2017 03:30:59 GMT

X-Filesize:9659323

ETag:"d6931115ddb9e82fa7eeddd4c9dfdd94"

x-amz-meta-crc32:C5619893

Cache-Control:max-age=31536000

Access-Control-Allow-Headers:Origin, Content-Type, Accept, Range, Content-Length

Access-Control-Allow-Methods:GET, PUT, POST, DELETE, OPTIONS, HEAD

Access-Control-Max-Age:31536000

Access-Control-Allow-Origin:*

X-Via-CDN:f=cnct,s=PSbjbgddxqe151:14,c=221.122.104.1;f=cnct,s=uzhoudianxin66:3,c=221.122.104.1;f=cnct,s=hxian174:6,c=221.122.104.1

Content-Range: bytes 0-184697/9659323

Age: 1

X-Via:1.1 hxian174:6 (Cdn Cache Server V2.0), 1.1 uzhoudianxin66:3 (Cdn Cache ServerV2.0), 1.1 PSbjbgddxqe151:14 (Cdn Cache Server V2.0)

?

[root@localhost~]#

?????? 正常的情况下,服务器响应状态码为206,表示本次请求处理成功。响应头中的Content-Range: bytes 0-184697/9659323行,斜杠后面的9659323表示文件的大小。

?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容

  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 2,526评论 0 6
  • 通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个...
    中二修行者阅读 4,377评论 0 1
  • HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大...
    肆意咯咯咯阅读 1,885评论 0 0
  • 田田睡觉的问题,从出生开始就是个头疼的问题,一直到现在。 首先,从洗澡或洗脸脚开始,这通常是我或老婆发起,一旦开始...
    wanbin阅读 144评论 0 1
  • 今年,相位比较多的一年,土星金星四分,土星十二宫,天王星先是合北交,然后一路横扫二宫,现在,四分月亮,对分冥...
    一个人的旅程lhl阅读 235评论 2 1