当前位置:  开发笔记 > 后端 > 正文

如何防止Rails中的浏览器页面缓存

如何解决《如何防止Rails中的浏览器页面缓存》经验,为你挑选了2个好方法。

Ubuntu - > Apache - > Phusion Passenger - > Rails 2.3

我网站的主要部分会对您的点击做出反应.因此,如果您点击链接,它会将您发送到目的地,并立即重新生成您的页面.

但是,如果您点击后退按钮,则看不到新页面.不幸的是,如果没有手动刷新,它就不会出现; 看来浏览器正在缓存它.我想确保浏览器不缓存页面.

另外,我确实想为所有静态资产设置远期到期日期.

解决这个问题的最佳方法是什么?我应该在Rails中解决这个问题吗?Apache的?JavaScript的?

谢谢你的帮助,杰森


唉.这些建议都没有强迫我正在寻找的行为.

也许有一个JavaScript的答案?我可以让rails在注释中写出时间戳,然后让javascript检查以查看时间是否在五秒钟内(或者无论什么工作).如果是,那么很好,但如果没有,那么重新加载页面?

你认为这会有用吗?

感谢你的帮助,

贾森



1> Jason Butler..:

最后想通了这一点- http://blog.serendeputy.com/posts/how-to-prevent-browsers-from-caching-a-page-in-rails/在application_controller.rb

class ApplicationController < ActionController::Base

before_filter :set_cache_headers

  private

  def set_cache_headers
    response.headers["Cache-Control"] = "no-cache, no-store"
    response.headers["Pragma"] = "no-cache"
    response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
  end
end


1990年1月1日是星期一!
它应该包含在"if request.xhr吗?"中 所以它只在ajax刷新时设置,但正常的页面没有?
只要浏览器符合HTTP 1.1,您才真正需要`Cache-Control:no-store`.[第14.9.2节缓存可存储的内容](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.2)
它对我不起作用我在application_controller.rb中添加了相同的代码,在注销后我可以通过后退按钮看到最后一页.请指导我哪里错了?

2> 小智..:

使用:

expires_now()

http://api.rubyonrails.org/classes/ActionController/ConditionalGet.html#method-i-expires_now


这在Chrome 21.0.1180.57中对我不起作用.
`expires_now`仅发送`no-cache`标头。取决于浏览器,这可能还不够。(例如,Firefox希望为非HTTPS连接设置一个“无存储”:https://developer.mozilla.org/en/docs/Using_Firefox_1.5_caching)
推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有