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