我正在使用firebug从我的rails应用程序查看网络流量,我发现css和javascript文件没有被缓存。在页面中,有类似的内容:
<script src="/javascripts/prototype.js?1315256241" type="text/javascript"></script>
并且好像?1315256241会导致FF不缓存该项目。但是?1315256241是几年前推出的Rails的“功能”。所以我很惊讶它阻止了项目被缓存,但没有人询问或修复它。
我在FF论坛上问同样的问题,也许在Rails论坛上无济于事。似乎没有人理解我的问题或其中的观点。所以我想我会在这里试试。
我的问题是“1315256241后缀(查询)是否阻止FF缓存页面?”
如果确实如此,大多数人在Rails中做了什么来防止这种情况?
答案 0 :(得分:1)
我是否正确地想到了之后的数字?是一个随机生成的数字? 此方法有时粗略地用于 阻止 缓存
如果是这种情况,那么Firefox每次认为它请求不同的文件时都不会缓存,例如见下文。
/javascripts/prototype.js?1315256241
/javascripts/prototype.js?1315256242
/javascripts/prototype.js?1315256243
/javascripts/prototype.js?1315256244
等等
我会考虑删除查询字符串中的数字,因为它看起来并不是必需的。我不是rails dev,所以有兴趣看看你对这个“功能”的意思。
答案 1 :(得分:0)
如果您查看AssetTagHelper的文档并查找“自定义资产路径”,您会找到解释为什么代码会将时间戳与所需的更改添加到我的Apache配置以利用此功能的原因特征
默认情况下,Rails会将资产的时间戳附加到所有资产路径。这允许您为将来的资产设置缓存到期日期,但仍然可以通过简单地更新文件立即使其无效(并因此更新时间戳,然后更新URL,因为时间戳是其中的一部分,这反过来破坏缓存)。
您使用的Web服务器负责设置您需要利用此功能的缓存资产的远期到期日期。这是Apache的一个例子:
# Asset Expiration
ExpiresActive On
<FilesMatch "\.(ico|gif|jpe?g|png|js|css)$">
ExpiresDefault "access plus 1 year"
</FilesMatch>
(文件继续......)