断点续传在现在用得很普遍了,如果没有断点续传,那么下载的东西已经下载了90%,但是中断了下载过程,就要从头开始下载。本文就来简单介绍一下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

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 了。

知道了以上原理,就可以进行断点续传的编程了。

linux断点续传程序,Linux中实现断点续传的原理相关推荐

  1. linux五子棋程序,Java 中的“五子棋”游戏程序

    import Java.util.Scanner; public class FiveChessGame { private int temp; private String[][] String1; ...

  2. linux新手程序,linux新手需要掌握的入门级命令

    1. Man 我从"man"命令开始是因为从很多方面来看,它都是最基本的一个命令.这个命令是你在需要了解其他命令时需要使用的命令. 从本质上来讲,"man"命令 ...

  3. linux 扫描仪 程序,Linux桌面的4种扫描工具

    当无纸化的世界还没有出现的时候,越来越多的人通过扫描文件和照片来摆脱纸张.不过,光有扫描仪是不够的.你需要软件来驱动扫描仪. 但问题是,许多扫描仪制造商没有Linux版本的软件,他们捆绑在他们的设备. ...

  4. php写linux应用程序,Linux应用程序使用写文件调试程序的方法

    Linux,一切皆文件,那么在Android系统本身,也是Linux+java罢了,也是在Linux的运行环境下. 通常,我们在调试程序的都会使用printf. 在Android中,我们会去使用log ...

  5. linux 部署 程序,Linux 部署配置WEB APP

    陈科肇 =========== 目录 1 准备工作 2 导入应用程序数据 3 部署 3.1方案一 3.2方案二 ============================================ ...

  6. linux 游戏程序,LINUX下的各种游戏

    本文主要介绍LINUX下的各种游戏,其中包括LINUX自带的小游戏,经典的模拟器游戏,支持LINUX的大型游戏如DOOM3等,还有运行WINDOWS热门游戏的方法介绍.游戏迷们跟我来吧!本文以REDH ...

  7. linux可疑程序,linux可疑程序追踪

    今天的主角是旁边的服务器,学姐的Fedora.发生的情况和我的那台ubuntu类似.(看来是一起被黑了) 连接虽挡,进程犹在 其实昨天已经发现学姐的系统出问题了,采取的措施和我那台一样,iptable ...

  8. linux 计时程序,Linux下使用clock_gettime给程序计时

    MySQL学习笔记十三:表分区 1.分区一般用于非常大的表,采用"分而治之"的策略,将一个很大的对象分成多个小对象进行管理,每个分区都是一个独立的对象. 分区使用分区键将数据根据范 ...

  9. linux俄罗斯方块程序,linux环境下C++实现俄罗斯方块

    本文实例为大家分享了C++实现俄罗斯方块的具体代码,供大家参考,具体内容如下 本程序的运行环境是linux,用到了多线程.创建了一个用来绘图的线程和一个获取按键的线程.程序中有一些需要改善的地方,比如 ...

  10. linux 记事本程序,Linux记事本操作

    Linux记事本操作 vi编辑器模式 编辑模式下面显示:- -INSERT- - 命令模式下面显示:(默认什么都不显示) 尾行模式下面显示::wq(退出并保存) 进入编辑模式 a: 光标向后移动一位 ...

最新文章

  1. 死磕18个Java 8的日期处理,工作必用!
  2. 网上学python靠谱吗-0基础自学Python靠谱吗?如何快速学会?
  3. 牛逼!Docker遇到Intellij IDEA,再次解放了生产力~
  4. 如何解一元一次方程视频_初中数学一元二次方程,注重基础,实例解析考点
  5. dubbo应用程序的单元测试环境搭建(springtest,powermock,mockito)
  6. 计算机国际安全顶级会议
  7. 时间排序_你懂使用C ++ STL在线性时间内查找未排序数组的中位数吗
  8. 使用tcpdump,adb进行手机抓包
  9. 测试python第二周_python第二周作业
  10. 英特尔处理器的性能监控事件文件下载
  11. SAP License:BCS进阶第一篇-BCS相关概念
  12. springmvc源码解析MvcNamespaceHandler之mvc:default-servlet-handler/
  13. JSON入门教程(适合初学者)
  14. 石墨烯海水淡化lammps模拟建模方法
  15. 华中师范大学计算机学院学分绩,华中师范大学全日制本科交换生学分转换、成绩认定管理办法...
  16. 王者荣耀登录显示换服务器是不是封号,王者荣耀这么查看封号原因?千万不要这么做!...
  17. 全球及中国影视产业渠道建设分析与投融资风险分析报告2021-2027年
  18. 保姆级教程!最全苹果相机使用技巧(系列一)
  19. 【labelme格式json转为labelimg格式的xml(VOC)】
  20. parted扩展磁盘分区(实践篇)

热门文章

  1. Hibernate读书笔记-----事件机制
  2. 4SUM Leetcode
  3. jQuery做的自定义选项卡
  4. zuul业务检查相关模块
  5. 在Linux环境下select函数的初体验
  6. Android 打aar包
  7. Luogu5788 【模板】单调栈
  8. HDU3032 Nim or not Nim?
  9. BZOJ3156 防御准备
  10. js基础-20-js对象赋值时的key值问题