了解“后/redirect/获取”

我很难理解“post / redirect / get”的确切过程。 我已经梳理了这个网站和networking几个小时,除了“这里的概念”以外,什么也找不到。 它是如此简单,它不需要一步一步的教程? 有谁知道一个好的网站或书我可以用来find一个例子或教程?

从您的研究中可以知道, POST -redirect- GET看起来像这样:

  • 客户端获取一个表单的页面。
  • 表单POST到服务器。
  • 服务器执行该操作,然后redirect到另一个页面。
  • 客户端遵循redirect。

例如,假设我们有这个网站的结构:

  • /posts (显示/posts列表和“添加post”的链接)
    • /<id> (查看特定post)
    • /create (如果使用GET方法请求,则返回表单发布到自身;如果是POST请求,则创buildpost并redirect到/<id>端点)

/posts本身并不是真的与这个特定的模式有关,所以我会离开它。

/posts/<id>可能是这样实现的:

  • 在数据库中find具有该ID的post。
  • 使用该post的内容呈现模板。

/posts/create可能是这样实现的:

  • 如果请求是GET请求:
    • 将目标设置为自身并将方法设置为POST显示一个空的表单。
  • 如果请求是POST请求:
    • validation字段。
    • 如果有无效字段,请再次显示表单,并指出错误。
    • 否则,如果所有字段都是有效的:
      • 将post添加到数据库。
      • redirect到/posts/<id> (其中<id>从调用返回到数据库)

维基百科解释非常好!

问题

问题

解决scheme

解决方案

我会尝试解释它。 也许不同的观点是你的伎俩。

PRG浏览器最终提出两个请求。 第一个请求是POST请求,通常用于修改数据。 服务器响应一个位置标题在响应和身体没有HTML。 这会导致浏览器被redirect到一个新的URL。 然后,浏览器向新的URL发出GET请求,该URL对浏览器呈现的HTML内容做出响应。

我会试着解释为什么要使用PRG。 GET方法不应该修改数据。 当用户单击链接时,浏览器或代理服务器可能会返回caching的响应,而不会将请求发送到服务器; 这意味着数据在您想修改时不会被修改。 另外,不应该使用POST请求来返回数据,因为如果用户只想得到新的数据副本,他们就不得不重新执行请求,这将使服务器再次修改数据。 这就是为什么浏览器会给你一个模糊的对话框,询问你是否确定要重新发送请求,并可能再次修改数据或再次发送电子邮件。

PRG是POST和GET的组合,它们使用它们的用途。