http可能会损坏下载吗?


11

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

因此,当我看到一个下载站点提供他们提供的要下载文件的md5哈希值时,我总是会为之轻笑。我以前没有看到过这样的情况:我下载了文件,大小正确但内容不正确。

好吧,今天,我有了第一个案例。我下载了一个Ubuntu的iso版本,尝试安装它,但失败了,经过长时间的研究(我简直不敢相信原因可能是下载损坏),我检查了MD5,您知道吗,那是错误的(大小是正确)。所以我重新下载了它,然后又得到了另一个错误的md5。只有在我的第三次下载中,md5才是正确的。

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


Answers:


9

是的,这是可能的,尤其是在质量较差的Internet连接上-通常是无线连接,但是某些有线连接(例如我的连接在高速下也具有较高的错误率。

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


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


如果通过BitTorrent而不是HTTP下载Ubuntu,则可以自动验证文件。(每个文件都在下载时进行了验证,因此您不必重新下载整个文件。)


1
好答案。但是,如果您不介意的话,我想进一步探讨该主题。事实证明,“高速”部分非常重要。我在家从来没有任何问题,但是我所做的这个Ubuntu ISO下载正在工作,速度约为5Mb / s。我很难接受TCP是不可靠的,因为周围的几乎所有东西都是基于TCP的。除了此维基百科有关TCP不可靠性的文章之外,还有其他内容吗?您是否确切知道高速会如何影响问题?先感谢您。
Andrew Savinykh

1
@zespri:TCP 应该是可靠的,但是校验和不能捕获所有错误的100%。高速只是某些连接类型或不可靠链接上的一个因素……不幸的是,您和服务器之间的任何地方都可能发生这种情况,而不一定要在您的末端立即发生。(我会测试是否从位于不同国家的镜像下载。)当然,还有可能您的文件已在服务器的文件系统上损坏了
user1686 2011年

1
如果损坏的可能性很小,则增加服务器与服务器之间的跃点数将增加损坏的可能性???
特雷弗·博伊德·史密斯

1
@Trevor:取决于链接质量。以太网上的十跳比WiFi上的单跳可靠得多。(路由器/交换机本身几乎从来不会破坏数据;通常是由连接来完成的。)
user1686 2011年

这不是说HTTP本身已损坏并且应该修复吗?
still_dreaming_1 2015年

1

正如Grawity所说,有可能,但除此之外,我注意到了:

即使互联网连接稳定,也有可能在没有任何正当理由的情况下尽早完成下载-可能会发生。

最重要的是,如果内存不足,则下载内容可能会在写入磁盘之前缓存在内存中,并且由于内存不足,它会错误地写入文件。如果您经常下载质量不佳,则可能性很高。


噢,我讨厌网站服务器会随机中断下载,下载频率约为50%,不支持恢复...
user1686 2011年

1
威尔:是的,经常会有切边,因此我特意将它们排除在我的问题之外,说我以为尺寸是正确的。谢谢您的评论。
Andrew Savinykh

是的,这是该问题的关键声明“尺寸恰到好处”
Trevor Boyd Smith Smith
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.