快好知 kuaihz订阅观点

 

文件断点续传功能的原理

现在的文件上传下载功能,都是支持断点续传的。那么这看似很简单的小功能,背后实现的原理是怎样的呢?

断点续传支持从文件上次中断的地方开始传送数据,而并非是从文件开头传送。

断点续传的原理如下:

由于浏览器与服务端的通讯是基于HTTP协议,所以断点续传功能的原理就是靠HTTP请求来实现。

断点续传功能最核心的原理就是利用HTTP请求中的两个字段:客户端请求头中的Range,和服务端响应头的Content-Range。

我们举一个例子,模拟一下整个过程。

1、浏览器请求服务器上的一个文件时,所发出的请求如下(假设文件名为 file.zip,服务器域名为W):

GET /file.zip HTTP/1.1     //浏览器用GET方式获取file.zip文件,HTTP协议版本1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-

excel, application/msword, application/vnd.ms-powerpoint     //可接受的响应内容(文件)类型

Accept-Language: zh-cn    //可接受的响应内容语言(简体中文)

Accept-Encoding: gzip, deflate    //可接受的响应内容的编码方式

User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)   //浏览器的身份标识(浏览器类型)

Connection: Keep-Alive    //浏览器想要优先使用的连接类型

2、服务器收到请求后,寻找请求文件,提取文件的信息,然后返回给浏览器,返回信息如下:

200    //响应状态码(200标识成功)

Content-Length=123456789   //响应消息的长度(单位是字节)

Accept-Ranges=bytes    //服务器所支持的内容范围(字节)

Date=Mon, 30 Apr 2001 12:56:11 GMT    //此消息被发送时的日期和时间

ETag=W/“02ca57e173c11:95b”    //资源的标识符

Content-Type=application/octet-stream    //当前内容的类型

Server=Microsoft-IIS/5.0    //服务器名称

Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT    //所请求的对象的最后修改日期

3、此时文件已经开始下载了,如果现在停止了下载,那么再次下载文件时就要从已经下载的地方继续下载。现在比如按下了继续下载,那么此时浏览器的请求内容如下:

GET /file.zip HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-

excel, application/msword, application/vnd.ms-powerpoint

Range: bytes=200000-    //告诉服务器 file.zip 这个文件从200000字节开始传,前面的字节不用传了

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)

Connection: Keep-Alive

4、此时服务器收到这个请求后,返回的信息如下:

206     //表示服务器已经成功处理了部分GET请求

Content-Length=123256789

Content-Range=bytes 200000-/123456789    //表示已经返回了200000B的文件数据,同时也返回了文件的全部大小

Date=Mon, 30 Apr 2001 12:55:20 GMT

ETag=W/“02ca57e173c11:95b”

Content-Type=application/octet-stream

Server=Microsoft-IIS/5.0

Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT

以上就是断点续传的原理,在不同客户端实现时只需要找到不同的开发语言实现提交Range的方法即可。

作为产品功能的设计者,每一个看似简单的小功能,其背后的实现原理都值得我们去研究,正所谓“知其然,更要知其所以然”。

本站资源来自互联网,仅供学习,如有侵权,请通知删除,敬请谅解!
搜索建议:文件断点续传功能的原理  断点  断点词条  原理  原理词条  功能  功能词条  文件  文件词条  
设计

 3个角度聊聊:APP中情感化设计...

我们不喜欢和一个冷冰冰的毫无情感的机器打交道,那必定是枯燥的、无趣的。所以,加强情感化设计让用户感知并且深入人心,可以有利于品牌的传播。关于APP的情感化设计已...(展开)