为了账号安全,请及时绑定邮箱和手机立即绑定

理解“post / redirect / get”模式

理解“post / redirect / get”模式

慕标琳琳 2019-09-02 16:52:41
我很难理解“post / redirect / get”的确切过程。我已经梳理了这个网站和网络几个小时,除了“这里的概念”之外什么都找不到。如何理解post / redirect / get模式?
查看完整描述

2 回答

?
www说

TA贡献1775条经验 获得超8个赞

您可能从研究中POST了解到,-redirect- GET看起来像这样:

  • 客户端获取带有表单的页面。

  • 表单POST到服务器。

  • 服务器执行操作,然后重定向到另一个页面。

  • 客户端遵循重定向。

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

  • /posts (显示帖子列表和“添加帖子”的链接)

    • /<id> (查看特定帖子)

    • /create(如果使用该GET方法请求,则将表单发布返回给自己;如果是POST请求,则创建帖子并重定向到/<id>端点)

/posts 本身与这种特殊模式并不真正相关,所以我会把它留下来。

/posts/<id> 可能会像这样实现:

  • 在数据库中查找具有该ID的帖子。

  • 使用该帖子的内容呈现模板。

/posts/create 可能会像这样实现:

  • 如果请求是GET请求:

    • 显示一个空表单,目标设置为自身,方法设置为POST

  • 如果请求是POST请求:

    • 将帖子添加到数据库。

    • 重定向到/posts/<id><id>从调用数据库返回的位置)

    • 验证字段。

    • 如果存在无效字段,请再次显示表单并指出错误。

    • 否则,如果所有字段都有效:


查看完整回答
反对 回复 2019-09-02
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

我会试着解释一下。也许不同的视角可以帮到你。

使用PRG,浏览器最终会发出两个请求。第一个请求是POST请求,通常用于修改数据。服务器响应响应中的Location标头,并且正文中没有HTML。这会导致浏览器重定向到新URL。然后,浏览器向新URL发出GET请求,该URL响应浏览器呈现的HTML内容。

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

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


查看完整回答
反对 回复 2019-09-02
  • 2 回答
  • 0 关注
  • 1016 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信