代理如何处理 ETag?

代理如何处理 ETag?

我使用 ETag 来提高性能。我决定使用在服务器、客户端和代理上都有效的 ETag。

但是如果代理已保存 ETag,该如何处理?代理是否仍会询问网站 ETag 是否有效,还是代理本身只是回答“我知道这个。无需询问服务器?”

或者换句话说,如果启用了代理上的 ETag 缓存,以下场景是否仍然有效?

  1. 浏览器发出请求。返回 ETag“ABBA”
  2. 浏览器向服务器发出另一个请求。识别到 ETag“ABBA”,返回 304 2.1 浏览器使用本地缓存
  3. 浏览器向服务器发出另一个请求,发送 ETag“ABBA”。这一次,服务器认为数据已更改,因此它返回带有新 Etag 的新响应。

如果客户端和服务器之间有一个知道 Etag 的代理,它是否仍会询问服务器 Etag 是否有效,或者如果代理一旦知道 Etag,请求是否就此结束?

答案1

代理服务器的行为主要由您的缓存控制后端服务器设置的标头。

只要资源未过期,代理就会从缓存中提供该资源(包括所有相关元数据,如 ETag)。只要允许将资源保留在缓存中,代理就无需联系服务器来验证原始内容。

一旦 Cache-Control 标头指示资源应从缓存中过期或重新验证,代理服务器将再次联系服务器以验证原始资源。如果服务器上的 ETag 未被修改,则无需再次下载,同一对象(但具有更新的 Cache-Control 计时)可以保留在缓存中。

此资源可能会感兴趣。

相关内容