前天面试候选人,刚好看到了他做文件上传下载这块,然后也是无心之举便突然问了断点续传这个问题,结果候选人一懵,有点怔住了,可能他从来没有思考过这个问题,大多数上传下载都是接口侠,没有深入的理解这个原理,或者也不会debug出现的问题。
首先讲讲HTTP 协议中, 可以在请求报文头中加入 Range 段, 来表示客户机希望从何处继续下载。在以前版本的 HTTP 协议是不支持断点的, HTTP/1.1 开始就支持了(这也是分快传输的实现)。一般断点下载时才用到 Range 和 Content-Range 实体头。
断点续传是大型文件数据传输的核心。特别是多线程技术,socket技术,TCP和UDP技术,而且在版本包分发过程会结合p2p技术,比如我们经常用的迅雷下载,百度网盘,如果上传或者下载中断,你下次重新拉起上传下载,肯定都不是从新开始下载,而是从已经中断的点开始作业。
基本实现思想
断点续传的关键是断点,所以在制定传输协议的时候要设计好,如上图,我自定义了一个交互协议&