参考文章——断点续传原理解析
断点续传的原理
Http断点续传的原理:
是在http的请求上多定义了断点续传相关的HTTP头 Range
和Content-Range
字段(Range和Content-Range是HTTP/1.1中新增的HTTP头字段。它用于从服务器端中获取一个大文件的一部分内容,这极大地提高了HTTP的运行效率,很适合下载软件进行多线程下载和断点续传。)
HTTP1.1协议开始支持获取文件的部分内容,这为并行下载以及断点续传提供了技术支持。它通过在Header里两个参数实现的,客户端请求时对应是Range,服务器端响应时对应的是Content-Range。
但是在实际场景中,可能会出现的情况,在终端发起续传请求时,URL对应的文件内容在服务端已经发生变化,此时续传的数据肯定是错误的。如何解决?此时就需要有一个标识文件唯一性的方法。在RFC2616中也有相应的定义,比如实现Last-Modified来标识文件的最后修改时间,这样即可判断出续传文件是否发生过改动。同时RFC2616中还定义有一个ETag的头,可以使用ETag头来放置文件的唯一标识,比如文件的MD5值。
终端在发起续传请求时,应该在HTTP头中申明if-Match或者If-Modified-Since字段,帮助服务端判别文件变化。
另外RFC2616中同时定义有一个if-range头,终端如果在续传使用if-Range。if-Range中的内容可以为最初收到的ETag头或者是Last-Modfied中的最后修改时候。服务端在收到续传请求时,通过If-Range中的内容进行校验,校验一致时返回206的续传回应,不一致时服务端则返回200回应,回应的内容为新的文件的全部数据。