Post/Redirect/Get pattern | PRG 模式
Post/Redirect/Get 是一种 web 开发设计模式,用于防止表单的重复提交。
默认情况,提交 Post 请求到服务器后,如果直接刷新浏览器,会重新在提交一次 Post 请求。在访问电商网站时,提交订单采用的是 Post 请求,如果直接刷新浏览器就容易导致重复订单的提交,这个不是用户希望发生的行为。PRG 方法就是用户防止这种现象的发生。
默认情况:
下面例图描述了默认情况,服务器和浏览器处理 Post 请求的流程
PRG 设计模式
下面例图描述了用 PRG 方法来避免 Post 请求的重复提交。当服务器处理完 Post 请求后,会发响应给用户浏览器,指示用户浏览器用 Get 方式立刻访问另一条 URL 。用户浏览器拿到 Get 请求的数据,整个流程才算结束。此时用户刷新当前页面,也不会引起 Post 请求的重复提交了。
完善网页收藏功能
Post/Redirect/Get 方式除了能防止 Post 请求的重复提交外,还可以完善网页收藏功能。把 Post 请求直接返回的网页收藏到书签是无效的,因为这个网页的重现依赖于 Post 请求以及当时提前的数据。采用 PRG 方式,用户正常情况下收藏到的是重定向后 GET 方法返回的网页,这样使得收藏有效了。
参考资料: