Chrome 下载文件到 100% 后

Chrome 下载文件到 100% 后

我今天正在下载一些东西,我知道它只有 1.8 GB,但在下载了 1.8/1.8 GB 之后,发生了最奇怪的事情。Chrome 一直在下载文件,进度条开始显示加载动画,文件大小不断增加,直到 2.5 GB 后才停止。这是一个视频文件,它显示我的磁盘上有 2.5 GB,但它甚至无法播放。这是怎么回事?

答案1

HTTP 协议中有许多响应标头,其中之一就是标Content-Length头。这基本上可以让服务器告诉客户端响应中发送的数据有多大。与大多数智能浏览器一样,Chrome 使用此标头来确定在下载文件时显示的总文件大小,以及计算显示的下载进度。

但这存在两个问题:

  • 服务器并非严格要求发送此标头(仅在某些情况下才需要,并非所有情况都需要)。对于本地磁盘上的实际文件,服务器不发送此标头的情况很少见,但对于动态生成并在生成时发送的内容,这种情况并不罕见(例如,某些云存储服务动态生成的 ZIP 存档允许客户一次性下载一组文件,就属于此类)。发生这种情况时,Chrome 将显示下载进度,但不显示实际完成百分比,而是显示通常的加载栏以指示下载仍在继续。
  • 出于兼容性原因,如果标头不是必需的,但还是会发送,则必须将其视为建议信息,而不是严格指示响应的大小。这里列出的原因太多了,但结果是,在获取(或下载)资源时,Chrome(和大多数浏览器)会继续获取数据,直到服务器停止发送,因为它们无法相信标头所说的内容是准确的(事实上,Chrome 会在下载时隐藏报告的文件大小和实际文件大小之间的细微差异

您的情况是第二个问题导致的。当文件大小达到“满”并继续获取数据时,Chrome 最终会切换到显示内容,就像它不知道正在下载的文件大小时那样。想到的可能原因有两个:要么是错误(在服务器中,要么是某个中间系统中),要么是恶意活动(如果是这种情况,可能是中间人攻击或服务器被入侵)。

无论如何,您都应该将此事报告给您下载视频的网站的所有者,因为无论哪种情况对他们来说都可能是坏消息。


顺便提一下,如果 Chrome 能够从网络获取整个文件的速度比将其写入本地磁盘的速度更快,那么您也可以看到类似的行为,但文件大小不会增加。

相关内容