我为什么要使用REDIRECT从POST导航到GET?

时间:2014-12-19 19:20:53

标签: jsf jsf-2 post-redirect-get

以下是书籍摘录" JSF 2.0:完整参考文献" (也见于Ed Burns' blog):

  Michael Jouravlev在其有影响力的2004年8月的文章Redirect After Post中描述了许多Web应用程序存在的问题。他将问题描述如下:

     
    

所有交互式程序都提供两个基本功能:获取用户输入并显示结果。 Web应用程序使用两种HTTP方法实现此行为:POSTGET。当应用程序返回响应POST请求的网页时,这个简单的协议就会被破坏。 POST方法的特殊性与不同浏览器的特性相结合,往往会导致令人不快的用户体验,并可能导致服务器应用程序的状态不正确。

  
     

为了解决这个问题,Jouravlev描述了一种他称之为POST-REDIRECT-GET的技术,或简称为PRG模式。模式的规则如下:

     
    
        
  • 从不显示回复POST
  • 的网页     
  • 始终使用GET
  • 加载页面     
  • 使用POST
  • GET导航至REDIRECT     
  
     

我们已经看到JSF违反了第一条规则,每个页面使用POST   从Servlet API通过RequestDispatcher.forward()方法导航。确实,   最流行的基于Java Servlet的Web框架,包括Struts,使用这种方法   导航。 HTTP纯粹主义者正确地指出这种方法违反了第一条规则   PRG模式。 JSF不仅违反了第一条规则,而且在JSF 2.0之前,它很难实现   做任何其他方式。感谢JBoss的Seam团队提供的另一个JSF贡献   现在用JSF更容易做PRG。

首先,我没有让自己解释他试图解决的问题。 (当应用程序返回响应POST请求的网页时协议如何被破坏)

其次,即使我非常清楚重定向是什么,POST& GET意味着,我面临的问题是什么,实质上会迫使我使用POSTGET导航到REDIRECT我为什么要这样做(书摘&# 34; JSF 2.0:完整参考"续):

  

是否使用重定向在很大程度上取决于是什么   浏览器的地址栏中显示的内容很重要或者可能令人困惑   如果引用的页面不再与正在呈现的页面匹配。   何时使用重定向的另一个重要考虑因素是   性能。使用重定向将终止当前请求和   导致新的请求响应周期发生。如果页面有一个非常   大量的组件,这可能会有一个显着的性能   影响。重定向也可能需要额外往返   重新实例化已消失的任何请求范围的对象   下一个请求。

0 个答案:

没有答案