linux断点续传程序,Linux中实现断点续传的原理
断点续传在现在用得很普遍了,如果没有断点续传,那么下载的东西已经下载了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中实现断点续传的原理相关推荐
- linux五子棋程序,Java 中的“五子棋”游戏程序
import Java.util.Scanner; public class FiveChessGame { private int temp; private String[][] String1; ...
- linux新手程序,linux新手需要掌握的入门级命令
1. Man 我从"man"命令开始是因为从很多方面来看,它都是最基本的一个命令.这个命令是你在需要了解其他命令时需要使用的命令. 从本质上来讲,"man"命令 ...
- linux 扫描仪 程序,Linux桌面的4种扫描工具
当无纸化的世界还没有出现的时候,越来越多的人通过扫描文件和照片来摆脱纸张.不过,光有扫描仪是不够的.你需要软件来驱动扫描仪. 但问题是,许多扫描仪制造商没有Linux版本的软件,他们捆绑在他们的设备. ...
- php写linux应用程序,Linux应用程序使用写文件调试程序的方法
Linux,一切皆文件,那么在Android系统本身,也是Linux+java罢了,也是在Linux的运行环境下. 通常,我们在调试程序的都会使用printf. 在Android中,我们会去使用log ...
- linux 部署 程序,Linux 部署配置WEB APP
陈科肇 =========== 目录 1 准备工作 2 导入应用程序数据 3 部署 3.1方案一 3.2方案二 ============================================ ...
- linux 游戏程序,LINUX下的各种游戏
本文主要介绍LINUX下的各种游戏,其中包括LINUX自带的小游戏,经典的模拟器游戏,支持LINUX的大型游戏如DOOM3等,还有运行WINDOWS热门游戏的方法介绍.游戏迷们跟我来吧!本文以REDH ...
- linux可疑程序,linux可疑程序追踪
今天的主角是旁边的服务器,学姐的Fedora.发生的情况和我的那台ubuntu类似.(看来是一起被黑了) 连接虽挡,进程犹在 其实昨天已经发现学姐的系统出问题了,采取的措施和我那台一样,iptable ...
- linux 计时程序,Linux下使用clock_gettime给程序计时
MySQL学习笔记十三:表分区 1.分区一般用于非常大的表,采用"分而治之"的策略,将一个很大的对象分成多个小对象进行管理,每个分区都是一个独立的对象. 分区使用分区键将数据根据范 ...
- linux俄罗斯方块程序,linux环境下C++实现俄罗斯方块
本文实例为大家分享了C++实现俄罗斯方块的具体代码,供大家参考,具体内容如下 本程序的运行环境是linux,用到了多线程.创建了一个用来绘图的线程和一个获取按键的线程.程序中有一些需要改善的地方,比如 ...
- linux 记事本程序,Linux记事本操作
Linux记事本操作 vi编辑器模式 编辑模式下面显示:- -INSERT- - 命令模式下面显示:(默认什么都不显示) 尾行模式下面显示::wq(退出并保存) 进入编辑模式 a: 光标向后移动一位 ...
最新文章
- 死磕18个Java 8的日期处理,工作必用!
- 网上学python靠谱吗-0基础自学Python靠谱吗?如何快速学会?
- 牛逼!Docker遇到Intellij IDEA,再次解放了生产力~
- 如何解一元一次方程视频_初中数学一元二次方程,注重基础,实例解析考点
- dubbo应用程序的单元测试环境搭建(springtest,powermock,mockito)
- 计算机国际安全顶级会议
- 时间排序_你懂使用C ++ STL在线性时间内查找未排序数组的中位数吗
- 使用tcpdump,adb进行手机抓包
- 测试python第二周_python第二周作业
- 英特尔处理器的性能监控事件文件下载
- SAP License:BCS进阶第一篇-BCS相关概念
- springmvc源码解析MvcNamespaceHandler之mvc:default-servlet-handler/
- JSON入门教程(适合初学者)
- 石墨烯海水淡化lammps模拟建模方法
- 华中师范大学计算机学院学分绩,华中师范大学全日制本科交换生学分转换、成绩认定管理办法...
- 王者荣耀登录显示换服务器是不是封号,王者荣耀这么查看封号原因?千万不要这么做!...
- 全球及中国影视产业渠道建设分析与投融资风险分析报告2021-2027年
- 保姆级教程!最全苹果相机使用技巧(系列一)
- 【labelme格式json转为labelimg格式的xml(VOC)】
- parted扩展磁盘分区(实践篇)