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 方法返回的网页,这样使得收藏有效了。

参考资料:

Post/Redirect/Get, wikipedia

Post/Redirect/Get pattern | PRG 模式的更多相关文章

  1. Asp.net MVC - 使用PRG模式(附源码)

    阅读目录: 一. 传统的Asp.net页面问题 二.Asp.net MVC中也存在同样的问题 三.使用PRG模式 四.PRG模式在MVC上的实现 一. 传统的Asp.net页面问题 一个传统的Asp. ...

  2. Thinking In Design Pattern——MVP模式演绎

    原文<Thinking In Design Pattern——MVP模式演绎>不知为何丢失了,故重新整理了一遍. 目录 What Is MVP Domain Model StubRepos ...

  3. 转---Post/Redirect/Get pattern

    今天重新认识了Post/Redirect/Get pattern, 感谢hip-hop的session, 一下帮助我理清了概念和思路. 谈到pattern,首先要清楚它为了什么而产生: PRG (参见 ...

  4. Laravel与Repository Pattern(仓库模式)

    为什么要学习Repository Pattern(仓库模式) Repository 模式主要思想是建立一个数据操作代理层,把controller里的数据操作剥离出来,这样做有几个好处: 把数据处理逻辑 ...

  5. Provider Pattern提供者模式和策略模式

    http://www.codeproject.com/Articles/18222/Provider-Pattern Introduction Provider pattern is one of t ...

  6. 打造属于你的提供者(Provider = Strategy + Factory Method) 设计模式 - Provider Pattern(提供者模式)

    打造属于你的提供者(Provider = Strategy + Factory Method)   1.1.1 摘要 在日常系统设计中,我们也许听说过提供者模式,甚至几乎每天都在使用它,在.NET F ...

  7. Event Sourcing Pattern 事件源模式

    Use an append-only store to record the full series of events that describe actions taken on data in ...

  8. [LeetCode] 132 Pattern 132模式

    Given a sequence of n integers a1, a2, ..., an, a 132 pattern is a subsequence ai, aj, ak such that  ...

  9. [LeetCode] Word Pattern 词语模式

    Given a pattern and a string str, find if str follows the same pattern. Examples: pattern = "ab ...

随机推荐

  1. Day6 - Python基础6 面向对象编程

    Python之路,Day6 - 面向对象学习   本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发 ...

  2. Linq101-Restriction

    using System; using System.Linq; namespace Linq101 { class Restriction { /// <summary> /// Thi ...

  3. ASP.NET 5服务

    ASP.NET5已经把web服务从应用程序当中解耦出来了,它支持IIS和IIS Express, 用Kestrel和WebListener自宿主,另外,开发都或者第三方软件提供商都可以自定义开发ASP ...

  4. How JSP work.

    A JSP page exists in three forms: JSP source code: consists of a mix of HTML template code. Java lan ...

  5. SQL Server 2008中数据压缩

    SQL Server 2008中引入了数据压缩的功能,允许在表.索引和分区中执行数据压缩.这样不仅可以大大节省磁盘的占用空间,还允许将更多数据页装入内存中,从而降低磁盘IO,提升查询的性能.当然,凡事 ...

  6. exp、imp简单测试

    imp 分为以下几个测试场景 imp name1/password1 file=xxxx.dmp  full=y fromuser=name2 touser=name3 场景1 name1正确.pas ...

  7. 重新开始学习javase_多态(动态绑定、推迟绑定或者运行期绑定)

    一,谈向上转换,或者上溯造型 什么是向上转换(上溯造型),一句话就是父类的引用指向子类的对象.或者把子类的对象当作父类来用 为什么要进行向上转换?我们先看一个例子吧! @Test public voi ...

  8. php 与 ajax 获取123的案例

    同事问我,咱们从数据库里面获取数据,用ajax的方式展示到前台页面.啥都不说了,动手写个案例吧. 1,建立一个页面: <!DOCTYPE html PUBLIC "-//W3C//DT ...

  9. 原创 HTML5:JS操作SVG实践体会

    在工业信息化系统里,常常需要动态呈现系统的数据在一张示意图里,用于展现系统状态,分析结果等.这样用JavaScript操作svg 元素就有现实意义.本人近期做了一些实践,现分享一下. 需求: 你下面这 ...

  10. Thinkphp---练习:数据的增删改查

    利用ThinkPHP连接数据库的增删改查的例题:用到的数据库表名Info表,Nation表 数据显示页面:MainController.class.php中的方法(增删改查全包括--function ...