题
他们似乎都是发送的数据服务器里面的身体,那么是什么让他们不同吗?
解决方案
HTTP放:
把让的文件或资源在一个特定的URI,并且正是在这URI。如果已经有了一个文件或资源,URI,把替换的文件或资源。如果没有文件或资源存在,把创建一个。放的是 幂等, 但矛盾的是把反应是不可缓存。
HTTP员额:
后将数据发送给特定URI和预计的资源,URI处理的请求。网络服务器在这一点上可以决定做什么用的数据在下文指定的资源。后种方法不是 幂等, 但是后的反应 都 缓只要该服务器设置适当的缓存控制和到期头。
官方HTTP RFC指定后是:
- 注释现有的资源;
- 发布消息布告栏、新闻组、邮件列表, 或类似组的文章;
- 提供一块的数据,例如结果提交 形式,向数据处理过程;
- 延伸一个数据库,通过追加操作。
之间的差额和放:
RFC本身就说明了核心差异:
之间的根本区别 员额和把要求反映在 不同的含义 请求URI。URI后的请求 标识的资源,这将 处理封闭式实体。那 资源可能是数据接受 过程中,一个关于一些其他的 协议、或一个单独的实体, 接受的注释。相比之下, URI在把要求标识 实体的封闭式与请求的-- 用户代理的知道什么是URI 目和服务器都必须不 尝试应用请求给一些 其他资源。如果服务器的欲望 该请求被应用到 不同的URI,它必须发出一个301(永久移动)的响应;用户代理的可能那么做 自己决定是否向请求。
使用正确的方法,不相关:
一个好处 其余ROA vs肥皂是,当使用HTTP其余ROA,它鼓励合理使用HTTP词/方法。因此,举例来说,你只会用把当你想到创建一个资源在的确切位置。你将永远不会使用获得创建或修改的资源。
其他提示
只有语义。
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操作。
PUT是指用于“上传”的方法。填充到特定的URI,或覆盖该URI中已有的内容。
另一方面,POST是一种提交与给定URI相关的数据的方式。请参阅 HTTP RFC
据我所知,PUT主要用于更新记录。
-
POST - 创建文档或任何其他资源
-
PUT - 更新创建的文档或任何其他资源。
醇>
但要清楚该PUT通常会“替换”现有记录(如果它存在)并创建它是否存在......
其他人已经发布了很好的答案,我只想添加大多数语言,框架和用例,你将会比PUT更频繁地处理POST。至于PUT,DELETE等基本上都是琐事问题。
- GET :从服务器检索数据。应该没有其他影响。
- POST :将数据发送到服务器以创建新实体。通常在上传文件或提交网络表单时使用。
- PUT :与POST类似,但用于替换现有实体。
- PATCH :与PUT类似,但仅用于更新现有实体中的某些字段。
- 删除:从服务器中删除数据。
- TRACE :提供测试服务器接收内容的方法。它只返回发送的内容。
- 选项:允许客户端获取有关服务支持的请求方法的信息。相关的响应标头是Allow with supported methods。也在CORS中用作预检请求,以通知服务器实际的请求方法并询问自定义标题。
- HEAD :仅返回响应标头。
- CONNECT :当浏览器知道它与代理进行通信并且最终URI以https://开头时,由浏览器使用。 CONNECT的目的是允许端到端加密的TLS会话,因此数据对代理是不可读的。 醇>
POST被认为是工厂类型的方法。您可以在其中包含数据以创建您想要的内容,而另一端则知道如何处理它。 PUT用于更新给定URL的现有数据,或者当您知道URI将会是什么并且它尚不存在时创建新的东西(而不是POST将创建一些东西并返回一个URL到如有必要)。
请见: http://zacharyvoase.com/2009/07/03/http-post-put-diff/
我已经得到很恼火最近通过一个普遍的误解通过网页开发人员这一员额是用来创建一种资源,以及把用于更新/更改的一个。
如果你看一看第55页RFC2616("超文本传送协议–HTTP/1.1"), 9.6段 ("放"),就会看到什么把实际上是用于:
该放的方法的请求,封闭式实体将存在提供请求URI。
还有一个方便的段落的解释之间的差额和放:
之间的根本区别的职位,并请求把反映在不同的含义,请求URI。URI在后请求标识的资源,将处理封闭式实体。资源可能是数据接受过程中,一个关于其他一些协议、或一个单独的实体,该实体接受的注释。与此相反,URI在把要求标识的实体的封闭式与请求的用户代理知道什么URI旨在与服务器必须不试图用该请求的其他一些资源。
它没有提到任何有关差异之间的更新/创建的,因为这不是什么大约。这是约之间的差异这样的:
obj.set_attribute(value) # A POST request.
和这个:
obj.attribute = value # A PUT request.
所以请,停止扩散这种流行的误解。读你的Rfc。
REST要求开发人员明确地使用HTTP方法,并采用与 协议定义。这个基本的REST设计原则在它们之间建立了一对一的映射 创建,读取,更新和删除(CRUD)操作和HTTP方法。根据这个 映射:
•要在服务器上创建资源,请使用POST。
•要检索资源,请使用GET。
•要更改资源的状态或更新资源,请使用PUT。
•要删除或删除资源,请使用DELETE。
更多信息: RESTful Web服务:来自IBM的基础知识
POST和PUT之间的区别在于PUT是幂等的,这意味着,多次调用相同的PUT请求将始终产生相同的结果(没有副作用),而另一方面,重复调用POST请求可能有多次(附加)创建相同资源的副作用。
GET
:使用GET的请求只检索数据,即它请求指定资源的表示
POST
:它将数据发送到服务器以创建资源。请求正文的类型由Content-Type标头指示。它经常导致服务器上的状态或副作用发生变化
PUT
:创建新资源或用请求有效负载替换目标资源的表示
PATCH
:用于对资源进行部分修改
DELETE
:删除指定的资源
TRACE
:它沿着目标资源的路径执行消息循环测试,提供有用的调试机制
OPTIONS
:它用于描述目标资源的通信选项,客户端可以指定OPTIONS方法的URL,或者用星号(*)来表示整个服务器。 / p>
HEAD
:它要求的响应与GET请求的响应相同,但没有响应正文
CONNECT
:它建立到目标资源标识的服务器的隧道,可用于访问使用SSL(HTTPS)的网站
值得一提的是 POST
受到一些常见的 CSRF攻击,而 PUT
则不然。
当受害者访问attackersite.com时,下面的CSRF 无法使用 PUT
:
正常请求(发送cookie):( PUT
不是受支持的属性值)
<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>
XHR请求(发送cookie):( PUT
会触发预检请求)
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://target.site.com/deleteUser");
xhr.withCredentials=true;
xhr.send(["userId=5"]);
简单地
POST
用于创建资源并返回资源 URI
EX
REQUEST : POST ..../books
{
"book":"booName",
"author":"authorName"
}
此调用应该创建一本新书并返回该书 URI
Response ..../books/5
PUT
用于替换资源,如果该资源存在则只需更新它,但如果该资源不存在则创建它,
REQUEST : PUT ..../books/5
{
"book":"booName",
"author":"authorName"
}
使用 PUT
我们将提供资源标识符,但 POST
将返回新的资源标识符