Warm tip: This article is reproduced from serverfault.com, please click

其他-POST和PUT HTTP REQUEST有什么区别?

(其他 - What's the difference between a POST and a PUT HTTP REQUEST?)

发布于 2008-09-20 06:34:41

它们似乎都在将数据发送到体内的服务器,那么什么使它们与众不同呢?

Questioner
fuentesjr
Viewed
22
1,316 2019-11-13 12:18:01

HTTP PUT:

PUT将文件或资源放置在特定的URI上,并确切地放置在该URI上。如果该URI上已经有文件或资源,则PUT会替换该文件或资源。如果那里没有文件或资源,则PUT将创建一个文件或资源。PUT是幂等的,但自相矛盾的是PUT响应不可缓存。

PUT的HTTP 1.1 RFC位置

HTTP POST:

POST将数据发送到特定的URI,并期望该URI上的资源可以处理请求。此时,Web服务器可以确定在指定资源的上下文中如何处理数据。POST方法不是幂等的,但是只要服务器设置适当的Cache-Control和Expires标头,POST响应就可以缓存。

官方HTTP RFC指定POST为:

  • 注释现有资源;
  • 将消息发布到公告板,新闻组,邮件列表或类似的文章组;
  • 向数据处理过程提供数据块,例如提交表单的结果;
  • 通过附加操作扩展数据库。

POST的HTTP 1.1 RFC位置

POST和PUT之间的区别:

RFC本身解释了核心区别:

POST和PUT请求之间的根本区别体现在Request-URI的不同含义上。POST请求中的URI标识将处理封闭实体的资源。该资源可能是数据接受过程,通向其他协议的网关,或者是接受注释的单独实体。相比之下,PUT请求中的URI标识请求所包含的实体-用户代理知道要使用的URI,并且服务器绝不能尝试将请求应用于其他资源。如果服务器希望将该请求应用于其他URI,则它必须发送301(永久移动)响应;然后,用户代理可以自行决定是否重定向请求。

此外,更简洁一点的是RFC 7231第4.3.4节PUT状态(添加了强调),

4.3.4。

PUT方法请求目标资源的状态为请求消息有效载荷中包含的表示形式 createdreplaced具有该状态。

使用正确的方法,除无关紧要的以外:

REST ROA与SOAP的一个好处是,当使用HTTP REST ROA时,它鼓励正确使用HTTP动词/方法。因此,例如,仅当你想在该确切位置创建资源时才使用PUT。而且,你永远不会使用GET创建或修改资源。