HTTP响应中的Content-MD5字段是否通用?

时间:2011-11-28 18:26:50

标签: http hash httpwebrequest md5

我尝试从不同的服务器下载文件,并非所有服务器都在其标题中的Content-MD5字段中进行响应。

我想知道它是否是没有资源文件哈希的HTTP响应的标准?

感谢

3 个答案:

答案 0 :(得分:17)

  

Content-MD5标头字段 MAY 由源服务器或客户端生成,以用作实体主体的完整性检查。只有源服务器或客户端 MAY 生成Content-MD5头字段;代理和网关绝不能生成它,因为这会破坏它作为端到端完整性检查的价值。实体主体的任何接收者,包括网关和代理, MAY 检查此标头字段中的摘要值是否与实体主体的摘要值匹配

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

截至2014年6月:

  

Content-MD5标头字段已被删除,因为它已被删除      在部分答复方面执行不一致。

RFC 7231 - 超文本传输​​协议(HTTP / 1.1):语义和内容 - http://tools.ietf.org/html/rfc7231(第92页)

答案 1 :(得分:6)

HTTPbis正在弃用该标题字段(有关详细信息,请参阅http://trac.tools.ietf.org/wg/httpbis/trac/ticket/178。)

答案 2 :(得分:0)

纯MD5不支持部分验证,已过时。如果您尝试使用纯哈希函数进行任何高级操作,最终您将遇到following situation

  

我没有得到它......一旦文件准备完成,它就会全部启动   再次。我也收到消息"验证文件内容" ...什么   我该怎么办?

如果一个人下载超过20Gb的文件并且没有机会及早发现不匹配怎么办?如果没有哈希函数支持的部分验证,则无法将下载卸载到p2p。

所以现在人们需要坚持使用Merkle树。 Gnutella(G1和G2)和DC ++(NMDC和ADC)都使用TTH(TIGER Tree Hash),而eDonkey 2k使用AICH,但是使用这个哈希只是单独使用,而且不太优雅。所以TTH是事实上的标准,如果所有文件哈希值(即使没有严格要求)默认为TTH,那将是很好的,但我们还没有。

DC ++不是基于HTTP,而是Gnutella(1和2),因此您可以研究和/或支持这些HTTP标头。例如,Shareaza可以拦截来自浏览器的下载,并使用Alt-Location,Content-URN,X-Thex-URI标头将其卸载到p2p。