断点续传
断点续传的背景
有时候可能下载的文件过大,一次性传输遇到网络问题就很可能传输失败而需要全部重新下载。另外,断点续传还能够提供并发的下载提高下载速率。
断点续传的实现
如图,服务器通过返回的http报文头部字段告知客户端这只是请求数据的一部分,你需要再发起对剩余数据的请求。
断点续传的表现
浏览器
如果浏览器发起的请求中没有带range字段,而服务器没有返回全部数据,而是返回部分数据和一个206的状态码,则浏览器不会发起对剩余字段的请求,此时下载失败。
如果浏览器发起的请求带range字段,服务器返回指定range范围的数据,则下载成功
迅雷等下载器
如果迅雷发起的请求中没有带range字段,而服务器没有返回全部数据,而是返回部分数据和一个206的状态码,则迅雷会发起对剩余字段的请求,此时下载成功。
如果迅雷发起的请求带range字段,服务器返回指定range范围的数据,则下载成功。(服务器返回的range字段最好起始和结束点都一致,如果返回的range范围过小迅雷可能会提示下载失效)
结论
服务器的设计方面,应该让range的主动权应该掌握在客户端这边,如果请求中没有带range字段,则应该全部数据返回。如果带range字段,则应该返回确切范围内的数据。
如果下载的数据过大,服务器担心承受不住,可以断开TCP连接,则客户端那边会根据已经下载的内容再去发起对未下载内容的请求(带range字段)
这种设计模式下用迅雷下载,会先发起一个不带range的请求,拿到整个文件大小后再分段多线程发起对部分数据的请求。用谷歌浏览器下载,则直接是一个超级大的http包返回(状态码200)
探究浏览器的暂停恢复下载原理
下载测试:
查阅资料得到结论:
结论是通过测试和查找资料得出的,目前并未做过严格的抓包实验~
相关阅读
早期CPU由运算器和控制器组成,称为中央处理机。随着ULSI技术的发展,CPU芯片外部增加了一些逻辑功能部件,CPU越来越复杂,因此CPU基本部
游戏外挂开发原理外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂。比如模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本
**二、AOP的设计与实现 1、JVM的动态代理特性** 在Spring AOP实现中, 使用的核心技术时动态代理,而这种动态代理实
Handler内存泄露原理及完美自定义handler解决方案
发现handler有内存泄漏,但是度娘的那些静态类自定义handler并没有解决问题,并且那种方式局限性很严重。然后我用现在的这种方式完全
官方地址:http://www.yunshipei.com/cases.html