【问题标题】:Back Button behaviour after Post-Redirect-GetPost-Redirect-Get 后的后退按钮行为
【发布时间】:2012-05-31 16:58:30
【问题描述】:

我的应用程序通过响应标头禁用浏览器上的缓存,然后使用 Post-Redirect-Get 模式启用后退按钮以“重新获取”当前页面。
但是,现在使用 Firefox 12 和 IE 8 重新测试时,我没有看到我期望的结果(或者我之前在 IE 6 中看到的结果)。

选择后退按钮后,我可以看到浏览器正在尝试执行原始请求(Post),而不是重定向请求(Get)。当我查看 Firebug 的网络选项卡上的请求时,我看到以下内容:

看起来浏览器将 Post 和 Get 视为相同的请求,因此选择后退按钮正在重新提交 Post:

我正在使用 JSF,但我认为这是浏览器问题。有谁知道为什么浏览器不执行重定向页面的获取?

【问题讨论】:

    标签: http jsf post-redirect-get


    【解决方案1】:

    一切正常。后退按钮重新执行请求before“POST accountDetails.xhtml”,该请求未在您的第一个屏幕截图中列出,但根据第二个屏幕截图显然(并且在逻辑上)是“GET accountDetails.xhtml”。您显然在与该视图关联的 bean 中或在某些过滤器中进行一些检查并重定向到“registrationWelcome.xhtml”。第一张截图中的“POST accountDetails.xhtml”是当前请求,该请求已被重定向到“reviewInfo.xhtml”。

    后退按钮不会重新执行重定向。这是您自己的代码。后退按钮也不会重新执行 POST 请求,这在第二个屏幕截图中得到了确认。

    【讨论】:

    • 谢谢BalusC,你是对的,“POST accountDetails.xhtml”之前的请求是“Get accountDetails.xhtml”。只是为了澄清我的理解,您是说后退按钮将“POST accountDetails.xhtml -> GET reviewInfo.xhtml”视为相同的请求(和当前请求),因此执行前一个请求“GET accountDetails.xhtml”按返回按钮?
    • 只有在您导航离开reviewInfo.xhtml 之后 在下一页按下后退按钮时,后退按钮才会重新执行GET reviewInfo.xhtml 而不是POST accountDetails.xhtml。后退按钮确实不会重新执行当前请求。刷新按钮就是这样做的。如果没有 PRG,刷新按钮会顺便重新执行 POST。
    • 您的意思是“如果没有 PRG,back 按钮会顺便重新执行 POST。”?
    • 是的,但仅当您当前在页面中 POST 请求之后。重定向的请求不算作“在 POST 之后”。它已经完全取代了浏览器历史上的 POST。
    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 2021-11-03
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多