Chrome 的下载管理器“暂停”功能真的有效吗?

nut*_*ute 6 google-chrome download download-manager macos

我正在尝试使用 Chrome for Mac 下载一个大文件。这里的互联网参差不齐。有时互联网出现故障,或者我需要暂停下载。

我从来没有真正成功地恢复下载。有时它公然失败,有时它看起来好像在工作,但 20 分钟后它在同一个地方。

那么,“暂停”功能真的有效吗?那些 3rd 方下载管理器有用吗?

slh*_*hck 12

那么,“暂停”功能真的有效吗?

是的,通常是这样。

它的工作原理如下:每当您下载文件时,您都会向服务器发送一个包含相关文件的 HTTP 请求。服务器以 HTTP 消息进行响应,该消息由标头和实际内容组成。

如果所请求文件的大小已知,则 HTTP 标头会向您的浏览器显示“内容长度”。

例如,我正在尝试下载 PDF 文件,这是响应:

charon:~ werner$ curl -I www.ready.gov/business/_downloads/sampleplan.pdf
HTTP/1.1 200 OK
Server: Apache
ETag: "230b73353fc7715f06267967df11be04:1241094925"
Last-Modified: Wed, 29 Apr 2009 20:56:46 GMT
Accept-Ranges: bytes
Content-Length: 293125
Content-Type: application/pdf
Date: Wed, 07 Sep 2011 14:49:33 GMT
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)

重要的是这个Content-LengthAccept-Ranges领域。

  • Accept-Ranges 意味着您可以根据需要逐个访问文件
  • Content-Length 告诉你文件的整体大小

现在,当您开始下载时,您的浏览器会像往常一样下载文件,但它当然也会跟踪下载的字节并将所有内容存储在一个临时文件中。如果您然后单击“暂停”,则连接将中止。

但是,由于浏览器知道下载的字节数,因此当您单击“继续”时,它可以使用 HTTPRange字段请求在此时继续下载文件。这在HTTP 1.1 Header Field Definitions 中都有解释:

使用条件或无条件 GET 方法的 HTTP 检索请求可以请求实体的一个或多个子范围,而不是整个实体,使用范围请求标头,该标头适用于作为请求结果返回的实体。


棘手的是,当您的连接容易出错时,Chrome 可能没有意识到连接丢失,因此记录了错误的下载字节数,甚至无法恢复与服务器的连接。我不知道这样做的 Chrome 内部结构,但如果它无法发送成功的 HTTP 请求,它可能无法恢复下载。

根据这个答案,即使 TCP 连接被手动关闭/中止,Chrome 理论上也可以将下载视为“已完成”。这将解释您所描述的“似乎在工作”。

此外,某些服务器可能不支持该Range命令,尽管我认为这种情况很少见。一些像 Rapidshare 这样的网站似乎无法恢复某些下载。

最后,您可以考虑使用下载管理器,看看是否能解决您的问题。除此之外,如果可能,使用 BitTorrent 下载文件可能是比普通 HTTP 下载更安全的选择。