我正在尝试使用 Chrome for Mac 下载一个大文件。这里的网络不稳定。有时网络会断线,或者我需要暂停下载。
我从来没有真正成功地恢复过下载。有时它明显失败,有时它似乎在工作,但 20 分钟后它又回到了同一个位置。
那么,“暂停”功能真的有用吗?那些第三方下载管理器有用吗?
答案1
那么,“暂停”功能真的有效吗?
是的,通常情况下是的。
它的工作原理如下:每当您下载文件时,您都会向服务器发送包含相关文件的 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
其中最重要的是Content-Length
和Accept-Ranges
领域。
Accept-Ranges
意味着你可以根据需要逐个访问文件Content-Length
告诉你整个文件的大小
现在,当您开始下载时,您的浏览器将照常下载文件,但它当然也会跟踪下载的字节数并将所有内容存储在临时文件中。如果您随后单击“暂停”,连接将中止。
但是,由于浏览器知道已下载的字节数,因此当您单击“恢复”时,它可以使用 HTTP 字段请求从此处继续下载文件Range
。这一切都在HTTP 1.1 标头字段定义:
使用条件或无条件 GET 方法的 HTTP 检索请求可以请求实体的一个或多个子范围,而不是整个实体,使用 Range 请求标头,该标头适用于作为请求结果返回的实体。
棘手的是,当您的连接容易出错时,Chrome 可能无法意识到连接丢失,因此会记录错误的下载字节数,甚至无法恢复与服务器的连接。我不知道 Chrome 内部是如何做到这一点的,但它可能如果无法发送成功的 HTTP 请求,则无法恢复下载。
根据这个答案,即使手动关闭/中止了 TCP 连接,Chrome 理论上也可以将下载视为“完成”。这可以解释您所描述的“似乎正在运行”。
此外,有些服务器可能不支持该Range
命令,尽管我认为这很少见。Rapidshare 等一些网站似乎无法恢复一些下载。
最后,您可以考虑使用下载管理器,看看是否能解决您的问题。除此之外,如果可能的话,使用 BitTorrent 下载文件可能比使用普通 HTTP 下载更安全。
答案2
那么,“暂停”功能真的有效吗?
不,它在 Google Chrome 中不起作用。(虽然暂停按钮可以工作,但看起来当您单击暂停按钮时,Google Chrome 的内部从未停止下载文件。该按钮似乎什么也不做。当互联网连接丢失时可以看到这一点。这会破坏 Google Chrome,浏览器无法恢复)。
为了测试,我编写了一个简单的网页,它允许下载文件,并且还支持恢复下载。测试使用 Google Chrome 暂停下载的情况时,我发现浏览器实际上允许我在正在进行的传输中单击“暂停”,但是单击“恢复”不会发送任何 HTTP(范围)请求。
Firefox 浏览器似乎是能够暂停传输然后通过 HTTP 范围标头正确恢复的浏览器。
关于第三方下载管理器我不知道,肯定会有一些能够暂停和恢复 HTTP 下载。
答案3
我个人经常使用 wget 和 curl。
$ wget -c website.com/file.zip
然后,如果连接中断,只需再次运行相同的命令,它就会从中断的地方继续。如果 wget 没有因连接错误而自动退出,请 ^C 它,然后使用向上箭头并运行命令,直到它完成下载。您可以将其设置为循环,并让它一遍又一遍地运行命令 [延迟],直到它给出 0 退出代码 [成功]。
curl 也很好,我经常更喜欢 curl 而不是 wget,但是除非你知道自己在做什么,否则 wget 通常更容易。
答案4
添加我的 2020 年 2c,Chrome 85.0.4183.102
开始用可怜的 4G 下载 350MB 文件,但需要带宽来处理其他内容,所以在 120MB 上暂停,在此之前速度约为 1-2MB/s。当我暂停时,我的其他网络活动看起来仍然带宽不足。当我在大约 20 分钟后恢复下载时,它从 120MB 跃升至 350MB,速度大幅提升了 5..10 倍,文件已下载。所以我怀疑 Chrome 内部仍在下载。