亿万先生官方网站:布满的帮衬断点续传的上传/下载软件,~N 下载第0-N字节范围的源委

HTTP 1.1暗中认可援助断点续传。

简述

断点续传:指的是在上传/下载时,将职责(二个文书或压缩包)人为的撤销合并为多少个部分,每一个有个别使用三个线程进行上传/下载,假使蒙受互连网故障,能够从曾经上传/下载的一部分早先持续上传/下载未形成的一对,而并无需从头开始上传/下载。能够节省时间,进步速度。

 

 

 

断点续传的用途

突发性用户上传/下载文件必要历时数时辰,万一路径中断,不抱有断点续传的
HTTP/FTP 服务器或下载软件就只可以从头重传,相比较好的 HTTP/FTP
服务器或下载软件具备断点续传手艺,允许用户从上传/下载断线的地点继续传送,那样大大减少了用户的沉闷。

亿万先生官方网站:,广大的支撑断点续传的上传/下载软件:QQ
旋风、迅雷、快车、电驴、酷6、土豆、优酷、百度录像、新浪录制、Tencent录像、百度云等。

在 Linux/Unix 系统下,常用扶助断点续传的 FTP 客户端软件是 lftp。

关联header如下:

Range & Content-Range

HTTP1.1
协议(福特ExplorerFC2616)起头援救获取文件的有的内容,那为并行下载以及断点续传提供了本领帮助。它经过在
Header 里三个参数达成的,客户端发须要时对应的是 Range
,服务器端响应时对应的是 Content-Range。

Range

用以供给头中,钦命第一个字节的地方和最后二个字节的地点,一般格式:

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

用来响应头中,在发出带 Range 的呼吁后,服务器会在 Content-Range
尾部重回当前接受的界定和文书总大小。一般格式:

Content-Range: bytes (unit first byte pos) – [last byte
pos]/[entity legth]

例如:

Content-Range: bytes 0-499/22400

0-499 是指当前发送的数额的界定,而 22400 则是文本的总大小。

而在响应完结后,重临的响应头内容也不如:

HTTP/1.1 200 Ok(不使用断点续传情势) 
HTTP/1.1 206 Partial Content(使用断点续传格局)

 

加强校验

在实际上意况中,会产出一种情状,即在终端发起续传需要时,U奥迪Q5L
对应的文本内容在服务器端已经产生变化,此时续传的数量一定是一无所能的。如何化解这几个主题素材了?分明此时亟待有三个标记文件独一性的法子。

在 奥迪R18FC2616 中也会有相应的概念,比方达成 Last-Modified
来标记文件的尾声修改时间,那样就能够剖断出续传文书时是还是不是曾经发生过更动。同期FC2616 中还定义有一个 ETag 的头,可以动用 ETag 头来放置文件的独步天下标记。

Range:用于客户端到服务端的伸手,能够通过改字段钦命下载文件的某一段大小及其单位,字节偏移从0起初。典型格式:

Last-Modified

If-Modified-Since,和 Last-Modified 同样都是用于记录页面最终修改时间的
HTTP 头消息,只是 Last-Modified 是由服务器往客户端发送的 HTTP 头,而
If-Modified-Since
则是由客户端往服务器发送的头,能够看到,再度呼吁本地存在的 cache
页面时,客户端会通过 If-Modified-Since 头将原先服务器端发过来的
Last-Modified
最终修改时间戳发送回去,那是为了让服务器端进行表明,通过这一个日子戳推断客户端的页面是或不是是最新的,若是否风靡的,则赶回新的开始和结果,假诺是最新的,则赶回
304 告诉客户端其地面 cache
的页面是新型的,于是客户端就能够直接从本土加载页面了,那样在网络上传输的多寡就能大大收缩,同期也减轻了服务器的担当。

    Ranges:    (unit=first byte pos)-[last byte pos]

Etag

Etag(Entity Tags)紧要为了化解 Last-Modified 不能消除的有的标题。

  1. 有的文本或许会周期性的改观,可是内容并不更动(仅退换修改时间),那时候大家并不希望客户端感到那一个文件被涂改了,而再一次GET。
  2. 或多或少文件修改拾叁分频仍,举例:在秒以下的光阴内张开更换(1s 内修改了 N
    次),If-Modified-Since 能检查到的粒度是 s
    级的,这种修改相当的小概确定(或然说 UNIX 记录 MTIME 只好正确到秒)。
  3. 有些服务器不能够可相信的拿走文件的终极修改时间。

为此,HTTP/1.1 引进了 Etag。Etag
仅仅是三个和文书有关的符号,能够是多少个本子标志,比如:v1.0.0;只怕说
“627-4d648041f6b80” 这么一串看起来很隐私的编码。不过 HTTP/1.1
规范并不曾规定 Etag 的原委是什么或然说要怎么落到实处,独一规定的是 Etag
必要放在 “” 内。

    Ranges:    bytes=伍仟- 下载从第四千字节起始到文件截至部分

If-Range

用以推断实体是或不是发生转移,假设实体未退换,服务器发送客户端错失的片段,否则发送全部实体。一般格式:

If-Range: Etag | HTTP-Date

也正是说,If-Range 能够使用 Etag 只怕 Last-Modified 重回的值。当没有ETage 却有 Last-modified 时,能够把 Last-modified 作为 If-Range
字段的值。

例如:

If-Range: “627-4d648041f6b80” 
If-Range: Fri, 22 Feb 2013 03:45:02 GMT

If-Range 必须与 Range 配套使用。如若要求报文中从不 Range,那么 If-Range
就能够被忽略。假设服务器不协理 If-Range,那么 Range 也会被忽视。

借使央求报文中的 Etag 与服务器指标内容的 Etag
相等,即未有发生变化,那么应答报文的情形码为
206。尽管服务器目的内容发生了变通,那么应答报文的事态码为 200。

用于校验的别样 HTTP
头音信:If-Match/If-None-Match、If-Modified-Since/If-Unmodified-Since。

    Ranges:    bytes=0~N 下载第0-N字节范围的内容

干活规律

Etag 由劳务器端生成,客户端通过 If-Range
条件剖断乞求来评释能源是或不是修改。央求一个文书的流程如下:

先是次呼吁:

  1. 客户端发起 HTTP GET 央浼多个文件。
  2. 服务器管理诉求,重回文件内容以及相应的 Header,当中饱含Etag(比方:627-4d648041f6b80)(假诺服务器协理 Etag 生成并已张开了
    Etag)状态码为 200。

其次次呼吁(断点续传):

  1. 客户端发起 HTTP GET 诉求贰个文书,同不常间发送
    If-Range(该头的故事情节正是第三遍呼吁时服务器重回的
    Etag:627-4d648041f6b80)。
  2. 服务器判别接受到的 Etag 和计算出来的 Etag
    是不是协作,纵然相称,那么响应的景况码为 206;不然,状态码为 200。

    Ranges:    bytes=M-N 下载第M-N字节范围的内容

质量评定服务器是不是协理断点续传

CU揽胜L 完成质量评定:

[root@localhost ~]# curl -i --range 0-9 http://www.baidu.com/img/bdlogo.gif
HTTP/1.1 206 Partial Content
Date: Mon, 21 Nov 2016 05:26:29 GMT
Server: Apache
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Set-Cookie: BAIDUID=0CD0E23B4D4F739954DFEDB92BE6CE03:FG=1; expires=Tue, 21-Nov-17 05:26:29 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1
Last-Modified: Fri, 22 Feb 2013 03:45:02 GMT
ETag: "627-4d648041f6b80"
Accept-Ranges: bytes
Content-Length: 10
Cache-Control: max-age=315360000
Expires: Thu, 19 Nov 2026 05:26:29 GMT
Content-Range: bytes 0-9/1575
Connection: Keep-Alive
Content-Type: image/gif

GIF89a[root@localhost ~]#

能够找到 Content-Range,则证明服务器帮助断点续传。有些服务器还恐怕会回去
Accept-Ranges,输出结果 Accept-Ranges: bytes
,表达服务器帮忙按字节下载。

http://blog.csdn.net/liang19890820/article/details/53215087

    Ranges:    bytes=-N 下载最终N字节内容

 

If-Range:用于客户端到服务端的伸手,用于判别实体是不是产生变动,必须与Range协作使用。若实体未被涂改,则响应所缺少的那部分;否则,响应整个新的实业。

The If-Range HTTP request header makes a range request conditional:
if the condition is fulfilled, the range request will be issued and the
server sends back
206 Partial
Content answer with the appropriate body. If the condition is not
fulfilled, the full resource is sent back, with
200 OK status.

 

Accept-Ranges:用于server到client的回答,client通过该自段剖断server是或不是支持断点续传。

    Accept-Ranges:bytes    表示帮忙以bytes为单位展开传输。

    Accept-Ranges:none     表示不援助断点续传

 

Content-Ranges:用于sever到client的回答,与Accept-Ranges在同贰个报文内,通过该字段钦赐了回到的公文资源的字节范围。格式如下:

    Content-Ranges:bytes M-N/size 大小为size的公文的第M-N字节范围的剧情

 

关于ETag

ETag用于标志/保证文件的独一性、完整性,每一回文件有创新该值就能够生成。

 

关于HTTP 206

断点续传,即使回去文件的一局地,则使用HTTP
206状态码;假使回去整个文件,则应用HTTP 200响应码。

HTTP/1.1 200 OK(不应用断点续传)

HTTP/1.1 206 Partial Content(使用断点续传)

 

HTTP/1.1 206 Partial Content

Server: nginx/1.4.2

Date: Fri, 20 Oct 2017 03:28:44 GMT

Content-Type: application/octet-stream

Content-Length: 11

Last-Modified: Tue, 25 Aug 2015 08:56:26 GMT

Connection: keep-alive

ETag: “55dc2dba-14dd5b”

Content-Range: bytes 0-10/1367387

 

断点续传检查:

curl -i –range 0-9 url   
响应中含有Accept-Range或许Content-Ranges则意味着帮忙。

 

参考:

If-Range:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Range

相关文章

网站地图xml地图