我看到了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-Modified
的Header unset Last-Modified
满足PageSpeed。
我对各种页面加载做了一个快速testing,至less在Chrome中,似乎没有什么区别 – 资源被caching了。
有谁知道哪个是合适的?
为了保持一致性,该代码被剪切并粘贴到原始的Rails帮助程序代码中。 (这是我复制它)。
我已经和史蒂夫·苏德斯 ( Steve Souders )进行了交谈 (谢谢,史蒂夫),他说:
您不应该取消设置Last-Modified。 我打赌写这个人是点击“重新加载”来做他们的测试。 当你点击“重新加载”时,你明确地告诉浏览器发送一个有条件的GET。 (看这个 )
ETag有同样的问题(如果你点击“重新加载”它会发送一个条件的GET)。 但它有一个不同的问题,可能意味着你应该取消设置ETag。 问题是Apache和IIS上的默认ETag语法会导致不必要的验证失败并浪费字节传输。 您应该配置语法来解决这些问题,但是大多数人发现只需要取消设置ETags会更容易。 (看这个 )
我会得到更新的Rails文档!