11

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

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

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

我还应该决定使用 Content-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

4

3 回答 3

1

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

于 2011-11-24T00:41:37.527 回答
0

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

4.3.2 文摘

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

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

消息描述的实例可能完全包含在消息正文中,部分包含在消息正文中,或者根本不包含在消息正文中。该实例由 Request-URI 和消息中包含的任何缓存验证器指定。

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

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

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

例子:

  Digest: md5=HUXZLQLMuI/KZ5KDcJPcOA==
  Digest: SHA=thvDyvhfIqlvFe+A9MYgxAfm1q5=,unixsum=30637
于 2020-03-19T12:56:26.820 回答
0

不要使用 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=

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"}
于 2020-08-18T10:27:09.453 回答