断点续传
断点续传是指的是在上传/下载时,将任务(一个文件或压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传/下载,如果碰到网络故障,可以从已经上传/下载的部分开始继续上传/下载未完成的部分,而没有必要从头开始上传/下载。可以节省时间,提高速度。
实现方法
使用HTTP1.1的Header 中的两个参数实现,客户端发请求时对应的是 Range ,服务器端响应时对应的是 Content-Range,并返回206状态码。
防止续传出错
出现错误的情景:在发起续传请求时,URL对应的文件内容在服务端已经发生变化。
解决方案:
-
使用If-Modified-Since(客户端发送给服务端)和Last-Modified(服务端发送给客户端)。If-Modified-Since把浏览器缓存页面的最后修改时间发送到服务器,服务器找到请求的实际文件,并和文件的最后修改时间比较。
-
如果时间一致,服务端返回状态码304(不返回实际文件内容),表明客户端的内容就是最新的,客户端直接使用本地缓存文件。
-
如果时间不一致,服务端返回状态码200和新的文件内容。客户端接收到后丢弃旧文件,缓存新的文件并使用。
-
-
使用Etag(对象标识符,服务端发送给)和If-Match(客户端发送给服务端)。浏览器就会把先前获得ETag值发送给WEB服务器,然后WEB服务器会把这个ETag跟该文件的当前ETag进行对比,然后就知道这个文件有没有改变了。
-
If-Range(客户端发送给服务端)和Etag(或浏览器缓存页面的最后修改时间)。服务端在收到续传请求时,通过If-Range中的内容进行校验,校验一致时返回206的续传回应,不一致时服务端则返回200回应,回应的内容为新的文件的全部数据。
Etag的作用:
-
一些文件也许会周期性的更改,但是内容并不改变(仅改变修改时间),这时候我们并不希望客户端认为这个文件被修改了
-
某些文件修改非常频繁,If-Modified-Since 能检查到的粒度是 s 级的
-
某些服务器不能精确的得到文件的最后修改时间。
参考博客:
https://blog.csdn.net/glpghz/article/details/107555555
https://blog.csdn.net/liang19890820/article/details/53215087

浙公网安备 33010602011771号