HTTP协议--断点续传

原创 2013年03月25日 15:41:56
要实现断点续传的功能,通常都需要客户端记录下当前的下载进度,并在需要续传的时候通知服务端本次需要下载的内容片段。

HTTP1.1协议(RFC2616)中定义了断点续传相关的HTTP头 Range和Content-Range字段,一个最简单的断点续传实现大概如下:
  1.客户端下载一个1024K的文件,已经下载了其中512K
  2. 网络中断,客户端请求续传,因此需要在HTTP头中申明本次需要续传的片段:
       Range:bytes=512000-
    这个头通知服务端从文件的512K位置开始传输文件
  3. 服务端收到断点续传请求,从文件的512K位置开始传输,并且在HTTP头中增加:
    Content-Range:bytes 512000-/1024000
    并且此时服务端返回的HTTP状态码应该是206,而不是200。

但是在实际场景中,会出现一种情况,即在终端发起续传请求时,URL对应的文件内容在服务端已经发生变化,此时续传的数据肯定是错误的。如何解决这个问题了?显然此时我们需要有一个标识文件唯一性的方法。在RFC2616中也有相应的定义,比如实现Last-Modified来标识文件的最后修改时间,这样即可判断出续传文件时是否已经发生过改动。同时RFC2616中还定义有一个ETag的头,可以使用ETag头来放置文件的唯一标识,比如文件的MD5值。

终端在发起续传请求时应该在HTTP头中申明If-Match 或者If-Modified-Since 字段,帮助服务端判别文件变化。

另外RFC2616中同时定义有一个If-Range头,终端如果在续传是使用If-Range。If-Range中的内容可以为最初收到的ETag头或者是Last-Modfied中的最后修改时候。服务端在收到续传请求时,通过If-Range中的内容进行校验,校验一致时返回206的续传回应,不一致时服务端则返回200回应,回应的内容为新的文件的全部数据。

我的ATL/ADO编程的曲折经历

我在用VC6的ATL作一个组件,它内部通过ADO访问Access数据库。因为ADO本身也是一系列组件,因此,ATL项目要引入ADO类型库,我是用以下语句引入的(假设Windows安装在C盘):#imp...
  • horris
  • horris
  • 2002-08-08 11:20:00
  • 1410

HTTP 断点续传协议头部分析

所谓断点续传,也就是要从文件已经下载的地方开始继续下载。在以前版本的 HTTP 协议是不支持断点的,HTTP/1.1 开始就支持了。一般断点下载时才用到 Range 和 Content-Range 实...
  • wwj_748
  • wwj_748
  • 2014-02-25 22:04:29
  • 3813

利用http协议实现断点续传

呵呵,文章标题写了大约半个月,到现在才写内容,因工作时间比较忙,敬请原谅。对于http协议作如下说明http是一个面向事务的客户服务器协议。http协议本身是无连接。每次请求完成后,就会片断开连接,下...
  • nxjbill
  • nxjbill
  • 2006-12-31 09:24:00
  • 1055

HTTP协议 断点续传

要实现断点续传的功能,通常都需要客户端记录下当前的下载进度,并在需要续传的时候通知服务端本次需要下载的内容片段。 HTTP1.1协议(RFC2616)中定义了断点续传相关的HTTP头 Range...
  • pastebin
  • pastebin
  • 2014-05-09 20:35:42
  • 793

http协议多线程下载,支持断点续传(后续再完善)

#include #include #include #include #include #include #include #include #include #include /...
  • qq_35039122
  • qq_35039122
  • 2016-07-28 00:09:54
  • 747

通过HTTP协议实现断点续传下载

  • 2013年06月27日 23:11
  • 8KB
  • 下载

基于HTTP协议的多线程下载he断点续传的实现.

  • 2011年12月23日 13:36
  • 850KB
  • 下载

http协议 文件下载原理及多线程断点续传

最近研究了一下关于文件下载的相关内容,觉得还是写些东西记下来比较好。起初只是想研究研究,但后来发现写个可重用性比较高的模块还是很有必要的,我想这也是大多数开发人员的习惯吧。 对于HTTP协议,向服务...
  • zhuhuiby
  • zhuhuiby
  • 2011-08-28 05:19:27
  • 22089

http协议学习系列(断点续传和多线程下载的实现原理)

q      HTTP协议的GET方法,支持只请求某个资源的某一部分; q      206 Partial Content 部分内容响应; q      Range 请求的资源范围; q   ...
  • qq_27093465
  • qq_27093465
  • 2016-08-09 14:38:05
  • 1092

HTTP必知必会——断点续传原理

要实现断点续传的功能,通常都需要客户端记录下当前的下载进度,并在需要续传的时候通知服务端本次需要下载的内容片段。 HTTP1.1协议(RFC2616)中定义了断点续传相关的HTTP头 Range...
  • zhangliangzi
  • zhangliangzi
  • 2016-05-09 00:28:22
  • 8339
收藏助手
不良信息举报
您举报文章:HTTP协议--断点续传
举报原因:
原因补充:

(最多只允许输入30个字)