了解“后/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的组合,它们使用它们的用途。