Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';POST和PUT HTTP请求之间的区别是什么?_Http_Post_Put - Fatal编程技术网

什么';POST和PUT 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的方法,或者覆盖该URI中已有的内容

另一方面,POST是一种提交与给定URI相关的数据的方法

仅参考语义

HTTP
PUT
应该接受请求主体,然后将其存储在URI标识的资源中

HTTP
POST
更为通用。它应该在服务器上启动一个操作。该操作可以是将请求主体存储在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为:

  • 现有资源的注释
  • 将消息发布到公告栏、新闻组、邮件列表, 或类似的一组物品
  • 提供数据块,例如提交 表单,以进行数据处理过程
  • 通过追加操作扩展数据库

POST和PUT之间的差异:

RFC本身解释了核心差异:

两者之间的根本区别 POST和PUT请求反映在 这个词的不同含义 请求URI。POST请求中的URI 标识将创建的资源 处理封闭的实体。那个 资源可能是接受数据的 进程,一个通往其他进程的网关 协议,或一个单独的实体 接受注释。相比之下 PUT请求中的URI标识 请求随附的实体-- 用户代理知道URI是什么 并且服务器不能 尝试将请求应用于某些应用程序 其他资源。如果服务器需要 将该请求应用于 不同的URI,它必须发送301(永久移动)响应;然后,用户代理可以执行以下操作: 它自己决定是否重定向请求

此外,更简洁地说,声明(添加了强调)

4.3.4。放置

PUT方法请求目标资源的状态为
已创建
已用表示定义的状态替换
包含在请求消息有效负载中

使用正确的方法,撇开不相关:


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主要用于更新记录

  • POST-创建文档或任何其他资源

  • PUT-更新创建的文档或任何其他资源

  • 但为了明确这一点,PUT通常会“替换”现有记录(如果存在),并在不存在时创建记录。

    请参见:

    最近,web开发人员普遍存在一种误解,认为POST用于创建资源,PUT用于更新/更改资源,这让我非常恼火

    如果您查看RFC 2616(“超文本传输协议–HTTP/1.1”)(“PUT”)的第55页,您将看到PUT的实际用途:

    PUT方法请求将封闭的实体存储在提供的请求URI下

    还有一个方便的段落解释POST和PUT之间的区别:

    POST和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"
    }