Caching 按下“后退”按钮时,什么决定浏览器是再次点击服务器还是重新呈现内存中的内容?

Caching 按下“后退”按钮时,什么决定浏览器是再次点击服务器还是重新呈现内存中的内容?,caching,browser,http-headers,back-button,Caching,Browser,Http Headers,Back Button,我正在开发一个Rails 3应用程序,我注意到当按下Back键时,浏览器会重新显示内存中已有的页面,而不是点击服务器 也就是说,我有99%的信心,在我以前开发的应用程序中,情况并非如此,浏览器会再次命中服务器 所以,如果我没记错的话,这一定是某个HTTP头/Rails正在设置的东西,使事情变得更简单 我想知道这是什么,因为这对我们来说是一种问题,在我们通过JS大量修改DOM的页面中,用户最终按下返回键并获得“原始”版本,而不是经过大量修改的版本,这在某些情况下确实令人困惑 编辑:我认为这样做已

我正在开发一个Rails 3应用程序,我注意到当按下Back键时,浏览器会重新显示内存中已有的页面,而不是点击服务器

也就是说,我有99%的信心,在我以前开发的应用程序中,情况并非如此,浏览器会再次命中服务器

所以,如果我没记错的话,这一定是某个HTTP头/Rails正在设置的东西,使事情变得更简单

我想知道这是什么,因为这对我们来说是一种问题,在我们通过JS大量修改DOM的页面中,用户最终按下返回键并获得“原始”版本,而不是经过大量修改的版本,这在某些情况下确实令人困惑


编辑:我认为这样做已经解决了问题,但没有:

def force_no_cache_on_back_button
  #expires_in -1, :public => false
  headers['Pragma'] = 'no-cache'
  headers['Cache-Control'] = 'no-cache; no-store; private; must-revalidate; max-age=0'
  headers['Expires'] = 1.day.ago.to_s
end
令人惊讶的是,在SSL证书损坏的情况下(我们使用自签名的登台服务器),HTTPS也能正常工作,但在生产环境中,使用“良好”的SSL证书,这种情况就不起作用了。这太奇怪了

还有其他想法吗


谢谢

Daniel

在不同的浏览器中进行测试。行为一致吗?非常一致。至少是新的行为(不重新攻击服务器)。至于旧的,我不能很容易地再次测试它,它是一个旧项目。缓存服务和服务器服务之间的区别如何体现?在这两种情况下,您都将获得未修改的“原始”页面。用户将加载一个页面。页面显示一个空列表。通过Ajax,他们将一些东西添加到列表中。如果服务器要重新呈现页面,它会呈现一个完整的列表。如果他们来回导航,会再次得到空列表。服务器是否知道哪些项目是通过Ajax添加到列表中的?