为什么 Rails 4 中静态内容使用摘要而不是 ETag

tik*_*ikh 5 etag ruby-on-rails http asset-pipeline

我认为 HTTP 的 ETag 正是使过时的缓存内容失效的机制。出于同样的目的,也可以使用摘要。为什么它们更好,为什么 etag 还不够?

Kap*_*old 4

因为 ETag 仍然需要客户端访问服务器来查看客户端的缓存副本是否仍然新鲜。Rails 在资产上放置了一个远期过期标头,这意味着客户端将永远不会再次访问服务器来获取已缓存的资产。然后,摘要成为服务器使客户端获取资产的新版本的手段。我认为 Rails 过去使用时间戳而不是摘要,但摘要还有一个额外的小好处,即如果将资产恢复到之前的状态,其摘要将是相同的,并且客户端可能仍将其缓存。

  • 摘要还有一个好处(相对于时间戳),即新部署可能最终会出现在资产文件中,而这些资产文件实际上都具有相同的内容,但它们都具有不同的时间戳。在这种情况下,时间戳方法将导致重新下载(相同的)断言,但摘要方法确保缓存仍然有效 (2认同)