在HTTP中,PUT和POST是否以不同方式发送数据?

时间:2011-12-14 17:05:20

标签: api http post put

据我所知,您可以通过POST发送JSON数据,但PUT是否应该专门在URI中发送信息,或者您可以同时执行这两项操作吗?

谢谢!

4 个答案:

答案 0 :(得分:14)

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成熟度模型

答案 1 :(得分:2)

从HTTP的角度来看,请求格式是相同的。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

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

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