使用HTTP报头进行消息完整性检查,因为Content-MD5已弃用



制作一个主要基于大文件上传/下载的REST web服务器,我希望能够检查文件的完整性。我认为正确的方法是使用Content-MD5 HTTP报头[0],这被aws的经验证明是有用的[1]。

然而,令我非常沮丧的是,我最近得知它被(将要)弃用了[2]。

关于弃用的讨论没有给出任何解决方法的提示,所以我问你:

我还应该决定使用内容md5 HTTP报头吗?

我应该使用具有相同含义的ETag (md5sum的base64编码)吗?

我应该使用?md5sum=XXX参数吗?

有没有更好的解决方案?

谢谢你的建议。

最诚挚的问候,b .

[0] https://webmasters.stackexchange.com/questions/2924/

[1] http://developer.amazonwebservices.com/connect/thread.jspa?threadID=22709

[2] http://trac.tools.ietf.org/wg/httpbis/trac/ticket/178

添加自定义标题,例如X-YourService-Integrity。这明确表明它是特定于您的服务的系统,并允许您在将来使用MD5以外的完整性检查机制(例如SHA1)。它还避免了您必须"过载"现有的类似机制,但不是您想要的。

请勿使用Content-MD5:它已被弃用,因为它会导致不一致。

使用sha-256或sha-512的摘要。我们正在将RFC3230更新为最新的HTTP规范(RFC7231),并添加了许多有用的示例https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-digest-headers-02

Digest: sha-256=4REjxQ4yrqUVicfSKYNO/cF9zNj5ANbzgDZt3/h3Qxo=

There Want-Digest允许请求一个特定的Digest头。

。客户端请求摘要,支持sha-256和sha-512。服务器返回sha-256

请求:

GET /items/123 HTTP/1.1
Want-Digest: sha-256, sha-512

反应:

HTTP/1.1 200 OK
Content-Type: application/json
Digest: sha-256=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=
{"hello": "world"}

2023注意:摘要字段名已经废弃根据(目前)最新的草案(-13),在7.1中。HTTP字段名注册有一个很好的概述:

IANA被要求更新"超文本传输协议(HTTP)字段名称注册"。注册表([HTTP])按照下表:

<表类>字段名状态参考tbody> <<tr> Content-Digest td> 本文档第2节 Repr-Digest td> 本文档第3节 Want-Content-Digest td> 本文档第4节 Want-Repr-Digest td> 本文档第4节消化td> 弃td> RFC3230],本文档第1.3节 Want-Digest td> 弃td> RFC3230],本文档第1.3节tbody>

https://www.ietf.org/rfc/rfc3230.txt

4.3.2消化

Digest消息头字段提供的消息摘要消息描述的实例。

  Digest = "Digest" ":" #(instance-digest)

消息描述的实例可能完全包含在消息体,部分包含在消息体中,或者根本不包含包含在消息体中。实例指定请求uri和消息中包含的任何缓存验证器。

摘要头字段可以包含多个实例摘要值。这对于预期驻留在缓存中的响应可能很有用由不同浏览器的用户共享,例如

接收者可以忽略摘要中的任何或所有实例摘要头字段。

发送方可以使用摘要算法发送实例摘要知道接收方是否支持摘要算法,甚至知道收件人会忽略它。

例子:

  Digest: md5=HUXZLQLMuI/KZ5KDcJPcOA==
  Digest: SHA=thvDyvhfIqlvFe+A9MYgxAfm1q5=,unixsum=30637

最新更新