文件断点续传功能的原理

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

断点续传支持从文件上次中断的地方开始传送数据,而并非是从文件开头传送。
断点续传的原理如下:
由于浏览器与服务端的通讯是基于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的方法即可。
作为产品功能的设计者,每一个看似简单的小功能,其背后的实现原理都值得我们去研究,正所谓“知其然,更要知其所以然”。
作者
流年。互联网产品设计师,4年互联网产品设计经验。擅长用户体验设计,喜欢钻研需求功能背后的技术实现方式;在成为综合型产品设计师的道路上不断努力前进!

关键字:文件断点续传, image, 文件, 请求

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部