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

13

两者都代表消息正文的哈希值。它们都可以用于检查某个资源是否自上次以特定客户端身份请求后发生了更改。如果它们执行相同的操作,为什么在RFC2616规范中会同时存在这两种机制呢?

1个回答

15
两者都代表消息体的哈希值。
不完全正确。Content-MD5是一个哈希,但ETag是一个不透明的标识符:客户端不知道它的含义。确实,生成适当的ETag的一种方法是通过对资源的数据进行哈希,但这肯定不是唯一的方法。
两者都可以用于检查自上次由特定客户端请求以来资源是否已更改。
这是真的,尽管在两种情况下理论上都可能出现假阳性和假阴性。
如果它们执行相同的操作,为什么它们会在RFC2616规范中并存?
它们共存是因为它们具有不同的目的;“它们执行相同的操作”是不正确的。
Content-MD5旨在让客户端验证正在传输的资源的完整性:它的含义被明确定义,并且不应在响应接收后使用。

ETag 旨在用于协调缓存。由于它是不透明的,因此允许将“资源标识符”的语义与其机制分离(因此服务器可以选择使用任何标识方案,并且可以在未来自由更改此方案,而客户端无法对此过程发表任何意见)。此外,ETag 支持 弱验证,允许将两个位不同的版本的资源视为语义上等效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接