为什么http前提条件头字段支持多个etags?

时间:2017-01-15 04:15:45

标签: http caching etag rfc http-caching

https://tools.ietf.org/html/rfc7232#section-3

什么时候需要检查多个etags而不只是一个?

例如,使用If-None-Match: "etag1","etag2"发送HTTP请求的目的是什么?为什么客户在那里需要"etag1""etag2"?客户端是否应该仅使用从服务器收到的针对此特定资源的最后一个etag?

1 个答案:

答案 0 :(得分:0)

为什么客户在那里同时需要etag1etag2

如果客户端在其缓存中同时具有etag1etag2,则发送两者都是有利的,因为这会扩展其可以跳过下载新数据的情况范围。

客户端是否应仅使用从服务器收到的针对此特定资源的最后一个etag?

您正在考虑一种资源,当资源发生变化时,始终会更改为新值,在这种情况下,缓存旧资源时没有任何意义。但是,情况不一定如此。想象一下在两种状态(表示)之间振荡的资源,在这种情况下缓存两者(并发送两个ETag)意味着您永远不必再次下载数据。

另一件需要考虑的事情是Content-Type可以在同一时间点更改同一资源的表示形式。想象一个客户端(比如说是一个中间缓存),它可以处理资源的文本和gzip压缩版本,并且已经拥有了一个。发送两个ETag(与Accept一起)意味着它不太可能必须下载新数据。