【发布时间】:2013-07-08 10:16:19
【问题描述】:
我正在开发一个新的 API。启用 ETags 后,Chrome 总是有条件地 GET 一个具有较长缓存生命周期的资源,也就是说,Chrome 在没有先确认 ETag 的情况下不再使用缓存版本。
ETag 应该这样与 GET 一起工作吗?
如果是这样,并且考虑到我不需要它们来进行更新竞争检查,我将删除 ETag 并减轻我的服务器正在做的额外工作。
编辑
我本以为 Chrome 会根据 max-age 使用缓存项,直到它过期,然后使用条件 GET 来更新其缓存项。
在我写这篇文章时,我现在想到它无法“更新其缓存项”,因为 304 不包含用于延长到期时间的 max-age。
所以我猜想启用 ETags 后,客户端将始终有条件地 GET,除非有充分的理由使用缓存版本,例如没有网络。
因此,当不需要并发控制时,ETag 似乎会损害服务器性能。
编辑
我想我已经猜到了答案(上图),但简而言之就是这个问题:
当启用 ETag 并且 Max-Age 远在未来时,用户代理是否应该始终使用条件 GET 而不是使用先前缓存的新响应?
【问题讨论】:
-
你能举个例子吗?
-
嗯,我不确定我能不能。这更像是一个发生的流程,而不是可以在代码中举例说明的问题。