![可暂停下载如何工作?](https://linux22.com/image/1376940/%E5%8F%AF%E6%9A%82%E5%81%9C%E4%B8%8B%E8%BD%BD%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
我使用 Internet Download Manager (IDM) 下载数据,我注意到它的下载进度窗口会显示下载是否可以暂停(可恢复)。通常,如果连接中断,文件共享网站不允许恢复传输。
那么问题是:它是如何工作的?是在服务器上完成一些配置吗?这与 torrent 下载有何不同,后者的下载始终可以恢复。
答案1
从编码角度来看,下载只是 HTTP 响应流中包含的字节数组。
这HTTP 1.1 协议(参见第 30 页)在标头中包含一个名为“范围”的字段,该字段允许请求指定所请求响应的字节偏移量和长度。
因此,从本质上讲,您可以说:“给我这个 URL 上的 HTTP 对象,但我只想要其中的第 1024 到第 4096 个字节”。然后,客户端浏览器将字节流附加到已下载文件的部分。客户端只需检查已下载文件的长度即可知道需要从哪里恢复,然后增加它以确定所需的偏移量。
至于您的下载管理器如何知道,它会发送 HTTP“HEAD”请求。如果响应代码为 206(部分内容),则 http 流支持恢复。
答案2
这可以使用持久性 Cookie,不要与会话 Cookie 或者,如果网站是基于 ASP.NET 构建的,则可以使用 [Viewstate],但这不是一个好的做法。Frank Thomas 给出了最好的答案。