当前位置: 首页 > news >正文

断点续传

FTP(文件传输协议)断点续传:指的是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传下载未完成的部分,而没有必要从头开始上传下载。用户可以节省时间,提高速度。

断点续传原理:在 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 了。    

参考文献:

http://blog.csdn.net/it_man/article/details/6602697#ibm-pcon

转载于:https://www.cnblogs.com/dobestself-994395/p/4264757.html

相关文章:

  • T-SQL查询进阶--变量
  • cocos2dx触屏响应(单点触摸)CCTouchBegan,CCTouchMove,CCTouchEnd
  • JQuery上传插件Uploadify API详解
  • c#鼠标在控件上面,然后显示文字
  • 什么是 ADO.NET?
  • [leetcode] Multiply Strings
  • 微信公众平台开发学习笔记1--验证服务器地址的有效性
  • jquery uploadify上传文件插件导致浏览器崩溃问题解决方法
  • Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-5-6 踩踏平台是怎么炼成的
  • FireDAC 之FDMetaInfoQuery
  • GIT操作笔记
  • DevExpress随笔系列
  • 4.2 HTML Canvas标签
  • java对象占用内存大小计算方式
  • iOS开发之oc(六)--点语法
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • JavaScript HTML DOM
  • JavaScript对象详解
  • k个最大的数及变种小结
  • MQ框架的比较
  • PHP 小技巧
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 基于HAProxy的高性能缓存服务器nuster
  • 力扣(LeetCode)21
  • 聊聊redis的数据结构的应用
  • 排序算法学习笔记
  • 区块链技术特点之去中心化特性
  • 数组的操作
  • 温故知新之javascript面向对象
  • 用Visual Studio开发以太坊智能合约
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 你对linux中grep命令知道多少?
  • scrapy中间件源码分析及常用中间件大全
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (3)nginx 配置(nginx.conf)
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C)一些题4
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (pojstep1.3.1)1017(构造法模拟)
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)scrum常见工具列表
  • ..回顾17,展望18
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core 版本不支持的问题
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET/C# 的字符串暂存池
  • .NET上SQLite的连接
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .net网站发布-允许更新此预编译站点
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解