代码之家  ›  专栏  ›  技术社区  ›  fuentesjr

POST和PUT HTTP请求有什么区别?

  •  673
  • fuentesjr  · 技术社区  · 16 年前

    它们似乎都在向主体内的服务器发送数据,那么是什么使它们不同呢?

    11 回复  |  直到 6 年前
        1
  •  690
  •   Community clintgh    9 年前

    HTTP PUT:

    Put将一个文件或资源放在一个特定的URI上,并正好放在那个URI上。如果该URI中已经有文件或资源,则PUT将替换该文件或资源。如果没有文件或资源,则PUT创建一个。放置是 idempotent 但矛盾的是,放置的响应不可缓存。

    HTTP 1.1 RFC location for PUT

    HTTP POST:

    post将数据发送到特定的URI,并期望该URI上的资源处理该请求。此时的Web服务器可以决定如何处理指定资源上下文中的数据。post方法不是 幂等元 但是,回复后 可缓存,只要服务器设置了适当的缓存控制和过期头。

    官方的HTTPRFC将post指定为:

    • 现有资源的注释;
    • 向公告板、新闻组、邮件列表发送邮件, 或类似的一组物品;
    • 提供数据块,例如提交 形成一个数据处理过程;
    • 通过追加操作扩展数据库。

    HTTP 1.1 RFC location for POST

    POST与PUT的区别:

    RFC本身解释了核心区别:

    两者之间的根本区别 POST和PUT请求反映在 不同意义的 请求URI。POST请求中的URI 标识将要 处理封闭实体。那 资源可能是接受数据 进程,通向其他进程的网关 协议,或单独的实体 接受批注。相比之下, Put请求中的URI标识 附在请求中的实体-- 用户代理知道什么是URI 预期和服务器不得 尝试将请求应用于 其他资源。如果服务器需要 请求应用于 不同的URI,它必须发送301(永久移动)响应;然后用户代理可以 它自己决定是否重定向请求。

    使用正确的方法,除此之外不相关:

    一个好处 REST ROA vs-soap是指在使用HTTP REST ROA时,它鼓励正确使用HTTP谓词/方法。因此,例如,您只在希望在该确切位置创建资源时使用Put。而且您永远不会使用GET创建或修改资源。

        2
  •  169
  •   Paul Roub Mark Dail    9 年前

    只有语义。

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

    一个HTTP协议 POST 更一般。它应该在服务器上启动一个操作。该操作可以将请求主体存储在由URI标识的资源中,也可以是其他URI,也可以是其他操作。

    放置是 喜欢 文件上传。输入到某个URI会确切影响该URI。发布到URI可能会产生任何影响。

        3
  •  101
  •   bhollis    16 年前

    要给出REST样式资源的示例:

    “post/books”包含一堆图书信息,可能会创建一本新书,并使用标识该图书的新URL响应:“/books/5”。

    “put/books/5”必须创建一个ID为5的新图书,或者用ID 5替换现有图书。

    在非资源样式中,post可以用于几乎所有具有副作用的内容。另一个区别是,Put应该是等幂的——将相同数据的多个Put放到同一个URL上是可以的,当多个Post可能创建多个对象或您的Post操作执行的任何操作时。

        4
  •  54
  •   Daniel Bruce    16 年前

    Put是一种将内容“上传”到特定的URI,或者覆盖该URI中已有内容的方法。

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

    参照 the HTTP RFC

        5
  •  37
  •   Rahul Krishna    9 年前

    据我所知,Put主要用于更新记录。

    1. 发布-创建文档或任何其他资源

    2. 放置-更新创建的文档或任何其他资源。

    但要清楚的是,这个放置通常会“替换”存在的现有记录,如果不存在则创建。

        6
  •  16
  •   Jason Morrison    16 年前

    其他人已经发布了非常好的答案,我只是想补充一点,对于大多数语言、框架和用例,您将要处理的帖子要比Put多得多。到目前为止,放置、删除等基本上都是琐碎的问题。

        7
  •  12
  •   Jonatan Dragon    6 年前
    1. 得到 :从服务器检索数据。应该没有其他效果。
    2. :将数据发送到服务器以创建新实体。通常在上载文件或提交Web表单时使用。
    3. :与Post相似,但用于替换现有实体。
    4. 补丁 :与Put类似,但仅用于更新现有实体中的某些字段。
    5. 删除 :从服务器中删除数据。
    6. 痕迹 :提供一种测试服务器接收到的内容的方法。它只返回发送的内容。
    7. 选项 :允许客户端获取有关服务支持的请求方法的信息。支持的方法允许相关的响应头。在CORS中还用作飞行前请求,以通知服务器实际的请求方法和询问自定义头。
    8. :仅返回响应头。
    9. 连接 :当浏览器知道它与代理对话,并且最终的URI以https://开头时使用。连接的目的是允许端到端加密的TLS会话,因此代理无法读取数据。
        8
  •  11
  •   user12786    16 年前

    岗位被认为是某种工厂类型的方法。您将数据包含在其中以创建您想要的内容,而另一端的任何内容都知道如何处理它。Put用于更新给定URL上的现有数据,或者在知道URI将是什么并且它不存在时创建新的数据(而不是在必要时创建并返回其URL的文章)。

        9
  •  9
  •   BrDaHa    10 年前

    请参阅: http://zacharyvoase.com/2009/07/03/http-post-put-diff/

    最近,我很恼火的是,Web开发人员普遍错误地认为,文章用于创建资源,而Put用于更新/更改资源。

    如果你看一下RFC 2616的第55页(__超文本传输协议_“http/1.1_), Section 9.6 (__Put_157;),您将看到Put的实际用途:

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

    还有一个方便的段落来解释Post和Put之间的区别:

    POST和PUT请求之间的根本区别体现在请求URI的不同含义中。POST请求中的URI标识将处理封闭实体的资源。该资源可能是一个接受数据的进程,一个到其他协议的网关,或者一个接受注释的独立实体。相反,Put请求中的URI标识与请求一起的实体“用户代理知道要使用什么URI,服务器不得尝试将该请求应用到其他资源。

    它没有提到更新/创建之间的区别,因为这与它的意义无关。关于这两者的区别:

    obj.set_attribute(value) # A POST request.
    

    而这:

    obj.attribute = value # A PUT request.
    

    所以,请停止这种普遍误解的传播。阅读你的RFC。

        10
  •  9
  •   Long Nguyen    7 年前

    REST要求开发人员以与 协议定义。这个基本的REST设计原则在 创建、读取、更新和删除(CRUD)操作和HTTP方法。根据这个 映射:

    要在服务器上创建资源,请使用Post。

    要检索资源,请使用get。

    要更改资源状态或更新资源,请使用Put。

    要删除或删除资源,请使用“删除”。

    更多信息: RESTful Web services: The basics from IBM

        11
  •  0
  •   irfan    6 年前

    post和put的区别在于put是等幂的,也就是说,多次调用相同的put请求总是会产生相同的结果(即没有副作用),而另一方面,重复调用post请求可能会产生多次创建相同资源的(附加)副作用。

    GET :使用GET ONLY检索数据的请求,即请求指定资源的表示形式

    POST :它将数据发送到服务器以创建资源。请求主体的类型由内容类型头指示。它通常会导致服务器的状态变化或副作用

    PUT :创建新资源或用请求负载替换目标资源的表示形式

    PATCH :用于对资源应用部分修改

    DELETE :删除指定的资源

    TRACE :它沿着目标资源的路径执行消息循环测试,提供有用的调试机制。

    OPTIONS :它用于描述目标资源的通信选项,客户机可以为选项方法指定URL,或者用星号(*)表示整个服务器。

    HEAD :它请求的响应与GET请求的响应相同,但没有响应主体

    CONNECT :它建立到目标资源标识的服务器的通道,可用于访问使用SSL(HTTPS)的网站。