很长一段时间以来,我一直认为,只要服务器上没有损坏并且 http 协议的实现是正确的,就不可能通过 http 下载损坏的文件,这很可能是现代主流软件的情况。
因此,当我看到一个下载站点提供了他们提供的下载文件的 md5 哈希值时,我总是会笑。我以前从未见过这样的情况,我下载文件时,大小正确但内容不正确。
嗯,今天,我遇到了第一个这样的案例。我下载了一个 Ubuntu 的 iso,试图安装它,但它失败了,经过长时间的研究(我简直不敢相信原因可能是下载损坏)我检查了 MD5,你知道什么,这是错误的(大小是正确的)。所以我重新下载了它并得到了另一个错误的 md5。只有在我第三次下载时,md5 才正确。
所以我的问题是,假设实现正确,传输成功完成并且服务器上的文件正确,原则上是否有可能通过 http 获取损坏的下载。如果这是可能的,那么这怎么会发生呢?
我刚刚在从 Microsoft 下载 ISO 时遇到了一个令人讨厌的问题。我成功地将它刻录到可重写的 DVD 上,并将内容复制到另一台机器上的本地硬盘驱动器,但是当我去运行它们时,它们已损坏。原来下载已被截断。
现在,好的,有时会发生这种情况 - 但令我惊讶的是截断的文件(仅略高于实际 ISO 的 60%)成功刻录,并且似乎向我展示了一个合理的文件系统,在我可以的范围内(显然)成功复制文件。
那么,有什么方法可以测试文件以查看它是否完整?MS 网站没有提供任何关于预期大小的信息,所以我正在寻找一个通用的解决方案:给定一个可能会或可能不会被截断的 ISO 文件,有什么方法可以告诉吗?常用的 CD/DVD(数据)格式是否包含任何关于磁盘上应该有多少数据的嵌入信息,或者更好的是某种 CRC?
检测大多数截断图像的解决方案将被接受,它不需要是完美的。(不过,我更喜欢不会产生误报的东西。)
[附录:将刻录的磁盘与截断的映像与从完整映像中提取的文件进行比较表明,许多文件中的数据块被随机信息替换,可能是从先前刻录到相同可重写文件的内容磁盘。]