【问题标题】:SendRedirect "preventing resubmission" guaranteed?SendRedirect “防止重新提交”有保证吗?
【发布时间】:2013-04-01 16:00:15
【问题描述】:

您好,我是服务器端编程 (java) 的新手,正在阅读 SendRedirect 与 Forward 之间的区别。 从Post-redirect-get pattern 开始,它解释说这将防止通过点击刷新按钮重新提交修改。但是,如果服务器端的后处理很繁重,并且在服务器处理帖子期间以及在它发回 3xx 重定向之前,用户刷新页面怎么办?服务器如何知道连续忽略第二个传入请求?

【问题讨论】:

    标签: java servlets


    【解决方案1】:

    我明白你的意思,事实上 PRG 保证防止双重 POST 提交,包括返回按钮只有在之前的重定向完成时,所以浏览器现在可以发送 GET 请求。

    但是如果在进行重定向之前运行了一个较长的进程会发生什么?

    我有两种已知的方法来处理这种情况:

    • 如果您在重定向之前有一个很长的过程要做,那么 PGR 目标将无法满足是合乎逻辑的;因此,如果有人遇到这种麻烦,then long-time process should be consider to run in separate thread 那么您可以简单地将重定向发送到可以向用户显示进度的页面(可选),这类似于 Ajax。

    • 这个我没试过但是很合乎逻辑Synchronization Token pattern,所以它基本上是基于在你的页面中设置一个隐藏的令牌,然后当一个POST请求被发送到服务器将增加该令牌和store it into session 的任意数量,因此下次用户单击提交按钮或刷新页面时,您可以compare the token 每次您的页面出现存储在会话中的那个时都会得到解决,这是另一种选择这样您就可以避免一遍又一遍地处理与同一用户关联的相同请求。

    如果你想了解更多,我给你这个链接http://www.deepakgaikwad.net/index.php/2009/03/19/post-redirect-get-design-pattern.html

    希望有用...

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 2018-03-18
      • 1970-01-01
      • 2019-03-28
      • 2017-05-22
      • 2011-03-09
      • 2016-01-18
      • 2013-07-24
      • 1970-01-01
      相关资源
      最近更新 更多