HTTP断点续传原理

摘要:
HTTP 1.1默认支持断点恢复。If RangeHTTPrequestheader是一个单独的请求条件:如果条件满足,则将发出rangerequest,服务器将返回一个带有属性主体的06 PartialContentanswer。条件未满足后,将返回全部资源,状态为200OK。接受范围:用于服务器到客户端的响应。客户端通过该自动段判断服务器是否支持断点恢复。Accept Ranges:字节表示支持以字节为单位的传输。Accept Ranges:无表示断点恢复不受支持内容范围:用于从服务器到客户端的回复。它与“接受范围”在同一消息中。此字段指定返回文件资源的字节范围。对于HTTP206断点恢复,如果返回文件的一部分,则使用HTTP206状态代码;如果返回整个文件,则使用HTTP200响应代码。
HTTP 1.1默认支持断点续传。
 
关联header如下:
 
Range:用于客户端到服务端的请求,可以通过改字段指定下载文件的某一段大小及其单位,字节偏移从0开始。典型格式:
    Ranges:    (unit=first byte pos)-[last byte pos]
    Ranges:    bytes=4000- 下载从第4000字节开始到文件结束部分
    Ranges:    bytes=0~N 下载第0-N字节范围的内容
    Ranges:    bytes=M-N 下载第M-N字节范围的内容
    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 a 206 Partial Content answer with the appropriate body. If the condition is not fulfilled, the full resource is sent back, with a 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

免责声明:文章转载自《HTTP断点续传原理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇fastdfs分布式文件系统部署【PCIE-4】---PCIE中部分概念或问题总结(很基础很重要)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# 判断中文字符的8种方法

方法一在unicode 字符串中,中文的范围是在4E00..9FFF:CJK Unified Ideographs。 通过对字符的unicode编码进行判断来确定字符是否为中文。 protectedbool IsChineseLetter(string input,int index)...{ intcode =0;intchfrom =Conve...

磁盘的分区、格式化、与挂载

1、磁盘分区:fdisk 【-l】 设备名称 -l:输出后面接的设备所有的分区内容。 1 [root@iZ255cppmtxZ ~]# fdisk -l 2 3 Disk /dev/xvda: 42.9 GB, 42949672960 bytes, 83886080sectors 4 Units = sectors of 1 * 512 = 512byt...

http协议的POST传数据

PostRequest使用StreamWriter对象写入请求流,不需要使用HttpUtility.UrlEncode显示转码,而下面的需要显示转码,还需要将参数转为字节码 蛋疼…………。 public static string PostRequest(string url, string postData) { HttpWebRequest httpW...

转载:Struts2支持断点续传下载实现

转自:http://blog.sina.com.cn/s/blog_667ac0360102eckm.html package com.ipan.core.controller.web.result; import java.io.InputStream; import java.io.OutputStream; import java.ne...

iptables详解之filter

iptables详解之filter iptables令很多小伙伴脑阔疼,下面我们来说说如何使用iptables。 一、iptables格式 1.1、iptables 帮助 通过iptables --help查看一下iptables用法 [root@note1 ~]# iptables --help iptables v1.4.21 Usage: ipta...

VUE内使用RSA加解密

说明:为防止私钥泄漏,由服务端生成两对密钥,分别是(前端公钥+私钥,后端公钥加私钥),采用加解密模式为:前端使用后台公钥加密,使用前端私钥解密;后端使用前端公钥加密,使用后端私钥解密。前后端统一使用公钥加密,私钥解密 一、现在vue项目中安装依赖包jsencrypt   npm install jsencrypt --save-dev 二、在项目中新建js...