使用 http 下载是否可能导致损坏?

使用 http 下载是否可能导致损坏?

长期以来,我一直认为,只要服务器上的文件没有损坏并且 http 协议的实现正确,就不可能通过 http 下载损坏的文件,而现代主流软件很可能就是这种情况。

所以当我看到下载网站提供他们提供下载的文件的 md5 哈希值时,我总是会笑。我以前从未见过下载文件时大小正确但内容不正确的情况。

今天我第一次遇到这种情况。我下载了 Ubuntu 的 iso,尝试安装,但失败了,经过长时间的研究(我简直不敢相信原因可能是下载损坏)我检查了 MD5,结果你知道吗,它是错误的(大小是正确的)。所以我重新下载了它,结果又得到了错误的 md5。只有在第三次下载时,md5 才是正确的。

所以我的问题是,假设实现正确、传输成功完成并且服务器上的文件正确,原则上是否可能通过 http 下载损坏。如果可能,那么这怎么会发生?

答案1

是的,这是有可能的,特别是在互联网连接质量较差的情况下——通常是无线连接,但一些有线连接(比如我所用的连接)在高速下也会出现较高的错误率。

HTTP 协议没有任何确保数据完整性的规定。在传输层,TCP使用校验和进行错误检测,但它不太可靠


提供哈希或数字签名还有另一个原因。通常,实际文件分布在许多镜像服务器上,无法保证 100% 安全。如果没有哈希或签名可供验证,则有权访问镜像的人(不一定是合法的)可以替换文件并且不被发现,而无需侵入托管网站的完全不同的服务器。


如果您通过 BitTorrent 而不是 HTTP 下载 Ubuntu,则可以自动验证文件。(下载时会验证每个文件,因此您无需重新下载整个文件。)

答案2

正如 Grawity 所说,这是可能的,但此外,我注意到:

即使网络连接稳定,下载也可能会无故提前完成 - 这种情况就有可能发生。

最重要的是,如果你的内存不好,下载内容可能会在写入磁盘之前缓存在内存中,而由于内存不好,文件写入不正确。如果你经常下载错误的文件,这种情况发生的可能性很高。

相关内容