【问题标题】:what does firefox decide not to cache?Firefox 决定不缓存什么?
【发布时间】:2011-11-14 09:36:07
【问题描述】:

我正在使用 firebug 查看我的 rails 应用程序的网络流量,我发现 css 和 javascript 文件没有被缓存。在页面中,是这样的:

<script src="/javascripts/prototype.js?1315256241" type="text/javascript"></script>

并且看起来好像 ?1315256241 导致 FF 不缓存该项目。但是 ?1315256241 是几年前引入的 Rails 的“功能”。所以我很惊讶它阻止了该项目被缓存但没有人询问或修复它。

我在 FF 论坛和 Rails 论坛上问过同样的问题,但无济于事。似乎没有人理解我的问题或问题的意义。所以我想我会在这里尝试。

我的问题是“?1315256241 后缀(查询)是否会阻止 FF 缓存页面?”

如果确实如此,大多数人在 Rails 中会做什么来防止这种情况发生?

【问题讨论】:

    标签: ruby-on-rails caching browser


    【解决方案1】:

    我认为后面的数字是对的吗?是随机生成的数字吗? 这种方法有时被粗暴地用于防止 缓存

    如果是这种情况,那么 Firefox 将不会缓存,因为每次它认为它正在请求不同的文件时,请参见下面的示例。

    /javascripts/prototype.js?1315256241

    /javascripts/prototype.js?1315256242

    /javascripts/prototype.js?1315256243

    /javascripts/prototype.js?1315256244

    等等等等

    我会考虑删除查询字符串中的数字,因为它看起来不是必需的。我不是 Rails 开发人员,所以很想知道您对这是一个“功能”的意思。

    【讨论】:

    • 它不是随机的,而是上次更改时间的时间戳。当我刷新时,数字不会改变。
    • 那么为什么要添加时间戳呢?它不是文件名的一部分。
    • 谢谢!在回答你的问题时,我找到了更大问题的答案。这是指向相应页面的链接(供其他人查找)。 api.rubyonrails.org/classes/ActionView/Helpers/… 寻找“自定义资产路径” 简短的回答是我需要在我的 Apache 配置中添加一些东西以利用这一点。
    • 有趣!将全面有用。很高兴您的问题得到解决!
    【解决方案2】:

    如果您查看 AssetTagHelper 的文档并查找“自定义资产路径”,您会发现为什么代码添加时间戳以及对我的 Apache 配置进行必要的更改以利用此功能的原因。

    默认情况下,Rails 会将资产的时间戳附加到所有资产路径。这允许您在很远的将来为资产设置缓存过期日期,但仍然可以通过简单地更新文件来立即使其无效(并因此更新时间戳,然后更新 URL,因为时间戳是其中的一部分) ,这反过来会破坏缓存)。

    您使用的网络服务器负责设置您需要利用此功能的缓存资产的远期到期日期。以下是 Apache 的示例:

    # Asset Expiration
    ExpiresActive On
    <FilesMatch "\.(ico|gif|jpe?g|png|js|css)$">
      ExpiresDefault "access plus 1 year"
    </FilesMatch>
    

    (文档还在继续……)

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 2013-09-09
      • 2011-05-14
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 2020-07-15
      相关资源
      最近更新 更多