【问题标题】:In HTTP, does PUT and POST send data differently?在 HTTP 中,PUT 和 POST 发送数据的方式不同吗?
【发布时间】:2011-12-14 17:05:19
【问题描述】:

据我所知,您可以通过 POST 发送 JSON 数据,但 PUT 应该专门在 URI 中发送信息,还是两者都可以?

谢谢!

【问题讨论】:

    标签: api http post put


    【解决方案1】:

    POST 和 PUT 都可以用于不同情况下的创建和更新操作。那么 PUT 和 POST 到底有什么区别呢? 简而言之:当且仅当您知道资源所在的 URL 以及资源的全部内容时才使用 PUT。否则,请使用 POST。

    POST 是一个非常笼统的动词。因为它既不保证安全也不保证幂等性,而且它在 RFC 中的描述相对宽松,因此您几乎可以将它用于任何事情。事实上,您可以将所有请求都发出 POST 请求,因为 POST 做出的承诺很少;如果它愿意,它可以表现得像 GET、PUT 或 DELETE。它还可以做一些其他动词无法做到的事情——它可以在不同于 HTTP 请求中的 URL 的 URL 上创建新资源;并且它可以修改资源的一部分而不改变整个事情(尽管提出但未被广泛接受的 PATCH 方法可以做类似的事情)。

    PUT 是一个限制性更强的动词。它需要一个完整的资源并将其存储在给定的 URL 中。如果之前有资源,则将其替换;如果没有,则创建一个新的。这些属性支持幂等性,而天真的创建或更新操作可能不支持。我怀疑这可能就是为什么 PUT 是这样定义的;这是一个幂等操作,允许客户端向服务器发送信息。

    参考资料:

    • RFC 2616 - HTTP 1.1
    • RFC 5789 - HTTP 的 PATCH 方法
    • Martin Fowler,Richardson 成熟度模型

    【讨论】:

    • 这是对你所说的内容的一个很好的扩展:PUT or POST the Rest of the Story
    • 它们(PUT 和 POST)在操作方式上是否存在技术差异?在这两种情况下,都需要查询数据库以检查记录是否已经存在。那么它有什么不同呢?
    【解决方案2】:

    从HTTP的角度来看,请求格式是一样的。

    【讨论】:

      【解决方案3】:

      您可以以相同的方式发送请求正文,只是您的应用程序代码处理方式不同...

      POST动词传统上用于创建资源

      PUT动词传统上用于更新资源

      【讨论】:

      • 有趣,我读过 POST 用于更新,PUT 用于创建,例如在此处接受的答案stackoverflow.com/questions/630453/put-vs-post-in-rest
      • 这实际上是一个惯例问题而不是标准问题,我不会依赖在这里找到一个“公认”的答案作为任何事情的具体证据...stackoverflow.com/a/2447740/555384 ...如果我是你,我会仔细阅读一些流行的 Restful api,看看他们是如何做到的......我想你会发现这个答案是最普遍接受的。
      【解决方案4】:

      PUT 在服务器上上传新资源。如果资源已经存在并且不同,则替换它;如果它不存在,则创建它。

      POST 触发服务器上的操作。它具有副作用,可用于触发订单、修改数据库、在论坛中发布消息或其他操作。

      【讨论】:

        猜你喜欢
        • 2014-05-14
        • 2015-07-27
        • 2016-06-14
        • 1970-01-01
        • 2017-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        相关资源
        最近更新 更多