什么';POST和PUT HTTP请求之间的区别是什么?
它们似乎都在向体内的服务器发送数据,那么是什么使它们不同呢?PUT是一种将内容“上传”到特定URI的方法,或者覆盖该URI中已有的内容 另一方面,POST是一种提交与给定URI相关的数据的方法 仅参考语义 HTTP什么';POST和PUT HTTP请求之间的区别是什么?,http,post,put,Http,Post,Put,它们似乎都在向体内的服务器发送数据,那么是什么使它们不同呢?PUT是一种将内容“上传”到特定URI的方法,或者覆盖该URI中已有的内容 另一方面,POST是一种提交与给定URI相关的数据的方法 仅参考语义 HTTPPUT应该接受请求主体,然后将其存储在URI标识的资源中 HTTPPOST更为通用。它应该在服务器上启动一个操作。该操作可以是将请求主体存储在URI标识的资源中,也可以是不同的URI,也可以是不同的操作 PUT与上传文件类似。对URI的put正好影响该URI。发布到URI可能会有任何影
PUT
应该接受请求主体,然后将其存储在URI标识的资源中
HTTPPOST
更为通用。它应该在服务器上启动一个操作。该操作可以是将请求主体存储在URI标识的资源中,也可以是不同的URI,也可以是不同的操作
PUT与上传文件类似。对URI的put正好影响该URI。发布到URI可能会有任何影响。发布被认为是工厂类型的方法。您将数据包含在其中以创建您想要的内容,而另一端的任何内容都知道如何处理它。PUT用于更新给定URL上的现有数据,或者在您知道URI将是什么而它还不存在时创建新的内容(与POST相反,POST将创建内容并在必要时向其返回URL) HTTP PUT: PUT将文件或资源放在特定的URI上,并且正好放在该URI上。如果该URI中已有文件或资源,则PUT将替换该文件或资源。如果那里没有文件或资源,PUT将创建一个。PUT是,但矛盾的是,PUT响应是不可缓存的 HTTP发布: POST将数据发送到特定URI,并期望该URI上的资源处理该请求。此时,web服务器可以确定如何处理指定资源上下文中的数据。POST方法不是,但是只要服务器设置适当的缓存控制并使头过期,POST响应就可以缓存 官方HTTP RFC指定POST为:
- 现有资源的注释李>
- 将消息发布到公告栏、新闻组、邮件列表, 或类似的一组物品李>
- 提供数据块,例如提交 表单,以进行数据处理过程李>
- 通过追加操作扩展数据库李>
已创建
或已用表示定义的状态替换
包含在请求消息有效负载中
使用正确的方法,撇开不相关:
vs SOAP的一个好处是,当使用HTTP REST ROA时,它鼓励正确使用HTTP谓词/方法。例如,当您想要在确切的位置创建资源时,您只会使用PUT。您永远不会使用GET来创建或修改资源。给出REST样式资源的示例:
POST/books
和一堆图书信息可能会创建一本新书,并用标识该书的新URL进行响应:/books/5
PUT/books/5
必须创建一本id为5的新书,或者用id 5替换现有的书
在非资源风格中,
POST
几乎可以用于任何有副作用的东西。另一个区别是,PUT
应该是幂等的-将相同数据的多个PUT
放到相同的URL应该可以,而多个POST
可能会创建多个对象,或者无论你的POST
操作做什么。其他人已经给出了很好的答案,我只是想补充一点,对于大多数语言、框架和用例,您将要处理的POST
要比PUT
多得多。就这点而言,PUT、DELETE、
等基本上都是琐碎的问题。据我所知,PUT主要用于更新记录
obj.set_attribute(value) # A POST request.
obj.attribute = value # A PUT request.
<!--deletes user with id 5-->
<form id="myform" method="post" action="http://target.site.com/deleteUser" >
<input type="hidden" name="userId" value="5">
</form>
<script>document.createElement('form').submit.call(document.getElementById('myform'));</script>
//deletes user with id 5
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://target.site.com/deleteUser");
xhr.withCredentials=true;
xhr.send(["userId=5"]);
EX
REQUEST : POST ..../books
{
"book":"booName",
"author":"authorName"
}
Response ...THE-NEW-RESOURCE-URI/books/5
REQUEST : PUT ..../books/5
{
"book":"booName",
"author":"authorName"
}