Tom*_*son 3 apache ruby-on-rails ruby-on-rails-3.1 asset-pipeline
我发现Rails 3.1指南建议与Google PageSpeed管理缓存资产的建议之间存在冲突.
导轨3.1导游资产管道提供一个解决方案Apache服务器的配置这里
apache配置的重要部分是:
<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>
Run Code Online (Sandbox Code Playgroud)
一切正常,但是当我运行谷歌的PageSpeed,它抱怨说我应该"指定缓存验证"设置要么Last-Modified或者ETag,列出所有的资产文件夹中的文件.
评论Header unset Last-Modified满足PageSpeed.
我对各种页面加载进行了快速测试,至少在Chrome中,它似乎没有什么区别 - 资产是以任何方式缓存的.
有谁知道哪个合适?
出于一致性的原因,该代码已从原始Rails帮助程序代码中剪切并粘贴.(是我复制了它).
我已经和史蒂夫·索德斯(感谢,史蒂夫)进行了核实,他说了以下内容:
你应该不会取消设置的Last-Modified.我打赌那个写过的人点击"重新载入"进行测试.当您单击"重新加载"时,您明确告诉浏览器发送条件GET.(见这个)
ETag有同样的问题(如果你点击"Reload"它将发送一个条件GET).但它有一个不同的问题,可能意味着你应该取消设置ETag.问题是Apache和IIS上的默认ETag语法导致不必要的验证失败和传输的浪费字节.您应该配置语法来解决这些问题,但是大多数人发现更容易取消设置ETag.(见这个)
我会更新Rails文档!