Question
在Web应用中,采用POST提交信息是很是常见的,然而若是目标页面打开得太慢,用户就可能会刷新页面,这时候以前已经提交过的信息就会被重复提交。即便用户成功打开了POST提交目标页,以后他经过连接导航到别处了,再退回到POST提交目标页时仍可能会重复提交页面(例如由于浏览器缓存已失效)。并且,只要碰到重复POST提交的场景,浏览器就会问用户是否确认重作此操做,用户并不必定能正确理解重作意味着重作什么,浏览器又不容许网站向用户解释清楚,因此这属于很是不友善的设计。那么咱们应该如何避免用户刷新带来的重复提交呢?
Answer
有一种最简单的模式可以解决这个问题,叫作PRG,也就是Post-Redirect-Get。在用户提交信息后,咱们不要在POST提交的目标URL返回结果页面,而返回一个302将浏览器重定向到真正的结果显示页,而后浏览器经过GET去获取那个页面。
这样作的话,用户刷新结果页,或者经过历史记录回到该页面,都不会致使浏览器要从新进行POST,天然也就不会出现烦人的是否重作对话框了。而对于你来讲,也有效避免了用户重复提交信息的可能性。