【问题标题】:Safari caching pages too heavily, how to add expires header using railsSafari缓存页面过多,如何使用rails添加过期标头
【发布时间】:2011-01-23 21:05:18
【问题描述】:

我正在缓存我的大部分页面并使用动态 js 文件来注入用户特定的内容。

所以在我的头文件中我有这样的东西:

<%= javascript_include_tag '/dynamic_header/current' %>

这将执行动态标题控制器 show.js.erb 视图,该视图与页面一起返回并处理动态内容的注入。

一切都很好,直到我在 safari 下进行测试。 (Firefox 工作正常)

似乎 safari 对该文件的缓存过于频繁,并且不会注意到它何时更改,即每次有新的 flash 消息或用户登录或注销时。

在我的控制器中是否有一种简单的方法可以向此文件添加过期标头?或者人们对如何让 safari 注意到缓存文件已更改有任何其他建议。

谢谢。

【问题讨论】:

  • 也许我的问题弄错了...您是在问如何防止 safari 缓存页面或该 javascript 文件?

标签: ruby-on-rails apache caching


【解决方案1】:

通常静态文件的修改日期会附加到它们的末尾以修复缓存问题。由于您的文件是动态的,因此您只需将当前时间添加到路径的末尾即可。

javascript_include_tag 不支持此功能,因此您需要手动编写脚本包含标签,如下所示:

<script type="text/javascript" src="/dynamic_header/current?t=<%=Time.now.to_i%>"></script>

祝你好运!

【讨论】:

  • 没有。缓存断路器用于所有静态文件的开发和生产。具体来说,当您使用 javascript_include_tag 或 stylesheet_tag 之类的标签时,rails 将在 public/stylesheets 或 public/javascripts 内部搜索文件,以便将时间戳附加到资产 url 的末尾。如果文件不存在(就像在这种情况下,因为文件实际上是动态生成的),则跳过此步骤。
【解决方案2】:

也许你可以添加这个标题:

Cache-Control: no-cache

最好的方法可能是连接到rack

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 2011-10-08
    • 2016-12-06
    • 2014-07-19
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    相关资源
    最近更新 更多