13

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

4

1 回答 1

15

两者都表示消息正文的哈希值。

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

两者都可用于检查自上次特定客户端请求后资源是否已更改。

这是真的,尽管在这两种情况下理论上你都可以得到假阳性和假阴性。

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

共存是因为它们服务于不同的目的;“他们做同样的事情”是不正确的。

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

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

于 2013-02-14T11:10:12.827 回答