如何代理处理ETags?

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

但是如果代理已经保存了ETag,怎么处理呢? 代理服务器是否仍然询问网站是否有效,或者代理服务器本身是否回答“我知道这个,不需要问服务器?

换句话说,如果启用了代理服务器上的ETagcachingfunction,以下情况仍然有效吗?

  1. 浏览器做请求。 一个ETag“ABBA”被返回
  2. 浏览器向服务器发出另一个请求。 ETag“ABBA”被识别,返回304 2.1浏览器使用本地caching
  3. 浏览器向服务器发送另一个请求,发送ETag“ABBA”。 这一次服务器决定数据已经改变,因此它返回一个新的Etag响应。

如果在客户端和服务器之间有一个知道ETag的代理,它是否仍然询问服务器Etag是否有效,或者如果代理知道了etag,请求是否结束?

代理服务器的行为主要由后端服务器设置的Cache-Control头控制 。

只要资源没有过期,代理将从caching中提供它(包括所有相关的元数据,如ETag)。 只要允许将资源保存在caching中,代理就不需要联系服务器来validation原始内容。

一旦Cache-Control头指示资源应该从caching过期,或被重新validation,代理服务器将再次联系服务器以validation原始资源。 如果ETag在服务器上未被修改,则不必再次下载,同一对象(但具有更新的caching控制时序)可以保留在caching中。

这个资源可能是有趣的。