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

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


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请求之间的根本区别反映在请求URI的不同含义中。 POST请求中的URI标识将处理封闭实体的资源。 该资源可能是数据接受过程,其他协议的入口或接受注释的独立实体。 相比之下,PUT请求中的URI标识请求附带的实体 - 用户代理知道URI的目标是什么,服务器不能尝试将请求应用于其他资源。 如果服务器希望将请求应用于不同的URI,它必须发送301(永久移动)响应; 用户代理可以自行决定是否重定向请求。

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

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


    只有语义。

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

    HTTP POST更通用。 它应该在服务器上启动一个动作。 该操作可以将请求主体存储在由URI标识的资源中,或者可以是不同的URI,也可以是不同的操作。

    PUT 就像文件上传。 放入URI会影响该URI。 对URI的POST可能会有任何影响。


    举例说明REST风格的资源:

    带有大量书籍信息的“POST / books”可能会创建一本新书,并用标识该书的新URL进行响应:“/ books / 5”。

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

    在非资源风格下,POST可以用于任何有副作用的事情。 另外一个区别是PUT应该是幂等的 - 对于同一个URL,同一个数据的多个PUT应该没问题,而多个POST可能会创建多个对象,或者你的POST动作不管它是什么。

    链接地址: http://www.djcxy.com/p/1075.html

    上一篇: What's the difference between a POST and a PUT HTTP REQUEST?

    下一篇: What are the best/common RESTful url verbs and actions?