在HTTP协议中,ETag和Content-MD5之间有什么区别?

时间:2013-02-14 10:56:20

标签: rest http protocols md5 etag

两者都代表消息体的hashsum。两者都可用于检查自上次特定客户端请求后资源是否已更改。如果它们做同样的事情,为什么它们在RFC2616规范中共存?

1 个答案:

答案 0 :(得分:14)

  

两者都代表邮件正文的哈希值。

不完全。 Content-MD5是一个哈希值,但ETag是一个不透明的标识符:客户端不知道它的含义。确实,生成适当ETag的一种方法是对资源数据进行散列,但肯定不是唯一的。

  

两者都可用于检查资源是否因为更改而被更改   上次是特定客户要求的。

这是事实,虽然在这两种情况下你理论上都可以得到假阳性和假阴性。

  

如果它们做同样的事情,为什么它们在RFC2616规范中共存?

共存是因为它们服务于不同的目的; “他们做同样的事情”并非如此。

Content-MD5旨在让客户端验证正在传输的资源的完整性:其含义已明确定义,并且在收到响应后不应使用它。

ETag旨在用于协调缓存。由于不透明,它允许将“资源标识符”的语义与其机制分离(因此服务器可以选择使用它想要的任何标识方案,并且将来可以自由地更改此方案,而客户端对该过程没有任何发言权)。此外,ETag支持weak validation,允许将两个不同版本的资源视为语义等效。