在Apache上的Rails 3.1,PageSpeed在使用Asset Pipeline apache config时说“指定caching校验器”

我看到了Rails 3.1指南build议的内容和Google PageSpeed提出的用于pipe理caching资产的内容之间的冲突。

资产pipe道的Rails 3.1指南在这里提供了一个解决schemeApache服务器configuration

apacheconfiguration的显着位是:

<LocationMatch "^/assets/.*$"> # Some browsers still send conditional-GET requests if there's a # Last-Modified header or an ETag header even if they haven't # reached the expiry date sent in the Expires header. Header unset Last-Modified Header unset ETag FileETag None # RFC says only cache for 1 year ExpiresActive On ExpiresDefault "access plus 1 year" </LocationMatch> 

一切正常,但是当我运行Google PageSpeed时,它抱怨我应该通过设置Last-Modified或者ETag来“指定cachingvalidation器”,列出资产文件夹中的所有文件。

注释掉未Header unset Last-ModifiedHeader unset Last-Modified满足PageSpeed。

我对各种页面加载做了一个快速testing,至less在Chrome中,似乎没有什么区别 – 资源被caching了。

有谁知道哪个是合适的?

为了保持一致性,该代码被剪切并粘贴到原始的Rails帮助程序代码中。 (这是我复制它)。

我已经和史蒂夫·苏德斯 ( Steve Souders )进行了交谈 (谢谢,史蒂夫),他说:

您不应该取消设置Last-Modified。 我打赌写这个人是点击“重新加载”来做他们的测试。 当你点击“重新加载”时,你明确地告诉浏览器发送一个有条件的GET。 (看这个 )

ETag有同样的问题(如果你点击“重新加载”它会发送一个条件的GET)。 但它有一个不同的问题,可能意味着你应该取消设置ETag。 问题是Apache和IIS上的默认ETag语法会导致不必要的验证失败并浪费字节传输。 您应该配置语法来解决这些问题,但是大多数人发现只需要取消设置ETags会更容易。 (看这个 )

我会得到更新的Rails文档!