可暂停下载如何工作?


19

我使用Internet下载管理器(IDM)来下载数据,并且我注意到在其下载进度窗口中,它显示下载是否可暂停(可恢复)。通常,如果连接断开,文件共享站点将不允许恢复传输。

所以问题是这样的:它如何工作?在服务器上完成了一些配置吗?这与洪流下载有何不同,洪流下载始终可以恢复下载。

Answers:


27

从编码角度来看,下载只是HTTP响应流中包含的一个字节数组。

HTTP 1.1协议(参见第30页)包括在所述报头字段称为“范围”,它允许以指定所要求的响应的字节偏移量和长度的请求。

因此,从本质上讲,您可以说:“在此URL下给我HTTP对象,但我只想要它的第1024个至第4096个字节”。然后,客户端浏览器将字节流附加到已经下载的文件部分。客户端只需检查已经下载的文件的长度即可知道需要恢复的位置,然后增加它的长度以确定所需的偏移量。

至于您的下载管理器如何判断,它会发送一个HTTP“ HEAD”请求。如果响应代码为206(部分内容),则http流支持恢复。


FTP也是传输文件的常用协议。它曾经是主要手段,尽管现在HTTP可能更常见。
ChrisInEdmonton 2013年

FTP使用基本上相同的构造,尽管在尝试实现使用它的代码之前,我必须先查找细节。
弗兰克·托马斯

1

可以使用Persistent cookie进行处理,不要与会话cookie混淆, 或者,如果站点是基于ASP.NET构建的,则可以使用[Viewstate],但这不是一个好习惯。弗兰克·托马斯(Frank Thomas)拥有最佳答案。


1
我不确定这个答案被否决的原因,所以我投票了。
Ramhound13年

@FrankThomas,我刚刚与我们的高级开发人员确认了一些事实,他说您“可以”使用Persistent cookie或viewstate存储字节数组的索引信息,该信息用于通过基于浏览器的下载器跟踪和恢复下载,但事实并非如此。好的做法。通常,对于大型可恢复文件(例如MS产品),您将下载下载管理器应用程序,并且该应用程序将按照您所说的那样工作。我赞成你的回答。
乔什·坎贝尔,

这个答案似乎毫无意义。确定已下载多少文件不是问题。客户已经知道这一点。您可以使用Cookie将其传达回服务器,但是有更好的方法。标头,GET或POST参数等。问题是询问如何恢复文件传输,而不是如何将信息传递给服务器。
ChrisInEdmonton 2013年

OP询问它是如何工作的,我向他指出了Cookies的方向,以便他可以做进一步的研究。开发人员可以使用多种方法来制作可恢复的下载器。我会使用客户端上的cookie通过起止索引来跟踪下载状态,并在后端使用C#来计算从索引X到索引Y,然后从Y恢复多少下载量。管理器执行的操作完全相同,只是将其信息存储在文本文件或数据库中。这不是stackoverflow,我不是在写源代码。
乔什·坎贝尔

@JoshCampbell,问题是您的解决方案仅对使用特定客户端软件和服务器软件的人员有效。正如Frank指出的那样,有解决此问题的标准方法,而无需自定义代码。此外,您的答案没有指出某些站点允许OP恢复下载的过程,因此也无法回答问题。这就是为什么我发表评论。
ChrisInEdmonton 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.