Linux中实现断点续传的原理

断点续传在现在用得很普遍了 , 如果没有断点续传 , 那么下载的东西已经下载了90% , 但是中断了下载过程 , 就要从头开始下载 。本文就来简单介绍一下Linux系统中断点续传是怎么实现的 。

Linux中实现断点续传的原理


断点续传的原理
其实断点续传的原理很简单 , 就是在 Http 的请求上和一般的下载有所不同而已 。
打个比方 , 浏览器请求服务器上的一个文时 , 所发出的请求如下:
假设服务器域名为 wwww.sjtu.edu.cn , 文件名为 down.zip 。
GET /down.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
服务器收到请求后 , 按要求寻找请求的文件 , 提取文件的信息 , 然后返回给浏览器 , 返回信息如下:
200
Content-Length=106786028
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
所谓断点续传 , 也就是要从文件已经下载的地方开始继续下载 。所以在客户端浏览器传给 Web 服务器的时候要多加一条信息 -- 从哪里开始 。
下面是用自己编的一个“浏览器”来传递请求信息给 Web 服务器 , 要求从 2000070 字节开始 。
GET /down.zip HTTP/1.0
【Linux中实现断点续传的原理】 User-Agent: NetFox
RANGE: bytes=2000070-
Accept: text/html ,  image/gif ,  image/jpeg ,  *; q=.2 ,  */*; q=.2
仔细看一下就会发现多了一行 RANGE: bytes=2000070-
这一行的意思就是告诉服务器 down.zip 这个文件从 2000070 字节开始传 , 前面的字节不用传了 。
服务器收到这个请求以后 , 返回的信息如下:
206
Content-Length=106786028
Content-Range=bytes 2000070-106786027/106786028
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
和前面服务器返回的信息比较一下 , 就会发现增加了一行:
Content-Range=bytes 2000070-106786027/106786028
返回的代码也改为 206 了 , 而不再是 200 了 。
知道了以上原理 , 就可以进行断点续传的编程了 。上一页12下一页 剩下全文

    推荐阅读