对断点续传原理的简单探究

本文探讨了断点续传的背景、实现方式及其在浏览器和下载器中的表现,强调了客户端控制range字段的重要性。同时,文章分析了浏览器暂停恢复下载的原理,指出在不同下载工具中的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

断点续传的背景

有时候可能下载的文件过大,一次性传输遇到网络问题就很可能传输失败而需要全部重新下载。另外,断点续传还能够提供并发的下载提高下载速率。

断点续传的实现

如图,服务器通过返回的http报文头部字段告知客户端这只是请求数据的一部分,你需要再发起对剩余数据的请求。
这里写图片描述

断点续传的表现
浏览器

如果浏览器发起的请求中没有带range字段,而服务器没有返回全部数据,而是返回部分数据和一个206的状态码,则浏览器不会发起对剩余字段的请求,此时下载失败。

如果浏览器发起的请求带range字段,服务器返回指定range范围的数据,则下载成功

迅雷等下载器

如果迅雷发起的请求中没有带range字段,而服务器没有返回全部数据,而是返回部分数据和一个206的状态码,则迅雷会发起对剩余字段的请求,此时下载成功。

如果迅雷发起的请求带range字段,服务器返回指定range范围的数据,则下载成功。(服务器返回的range字段最好起始和结束点都一致,如果返回的range范围过小迅雷可能会提示下载失效)

结论

服务器的设计方面,应该让range的主动权应该掌握在客户端这边,如果请求中没有带range字段,则应该全部数据返回。如果带range字段,则应该返回确切范围内的数据。

如果下载的数据过大,服务器担心承受不住,可以断开TCP连接,则客户端那边会根据已经下载的内容再去发起对未下载内容的请求(带range字段)

这种设计模式下用迅雷下载,会先发起一个不带range的请求,拿到整个文件大小后再分段多线程发起对部分数据的请求。用谷歌浏览器下载,则直接是一个超级大的http包返回(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值