Spring mvc结果页面和后退浏览器按钮

时间:2012-06-20 13:43:33

标签: java spring java-ee spring-mvc

在我的MVC spring应用程序中,我使用post方法将表单发送到页面,以使用一些参数执行搜索。搜索结果是一个列表,并且每个条目都可以导航到详细信息页面。它工作正常但是,当用户尝试使用后退浏览器按钮(或Javascript)返回结果页面时,我收到“过期页面”错误。刷新页面,它会重新提交帖子提交,并且工作正常。

为了防止此错误,我添加了

response.setHeader("Cache-Control", "no-cache");

到搜索控制器,一切正常,使用Safari和Firefox但是当我尝试使用IE(8和9)执行Web应用程序时,我得到了相同的“Expire page”错误。

访问详细信息页面并返回时没有出现任何错误的正确方法是什么?

谢谢你的时间!
安德烈

2 个答案:

答案 0 :(得分:3)

正确的方法是使用GET而不是POST:搜索是一种幂等操作,不会对服务器造成任何更改,并且此类操作应该使用GET完成。

答案 1 :(得分:2)

POST请求未过期似乎会破坏the very idea of a POST

  

根据RFC 2616,POST方法应该用于请求是非幂等的任何上下文:也就是说,每次执行时都会导致服务器状态发生更改,例如向博客帖子提交评论或者在网上投票中投票。

相反,我会重新构建您查看详细记录的方式,可能使用不会刷新显示结果的基础页面的覆盖DIV。对于许多现代Web应用程序,使用BACK按钮可能会导致页面流出现问题。