Mark一下:HTTP协议中PUT和POST动做的区别


(这篇文章排版好乱,可是懒癌发做的我如今暂时不想管了……_(:з」∠)_)
web

 

这个算是HTTP协议中最最最最基本的概念之一了吧,可是今天才意识到原来以前一直没有完全搞懂过。(固然我以为虽然如今比以前理解多一点了,可是尚未不折不扣搞明白orz...)服务器

因此啊,为了长点记性,仍是记录一下吧。app

以前本身对PUT和POST这两个动做的理解呢,只停留在“PUT用来更新资源,POST用来建立资源”这种浅显又有问题的认知上。ide

其实PUT和POST均可以用来建立和更新资源,他们俩最大的区别就是,PUT是“幂等”(idempotent)的,POST不是。→P.S. 到底什么是“幂等”这个我还没仔细去研究过,因此这里就不误人子弟了。有兴趣的能够本身研究一下~~或者等我哪天懒癌没有发做了说不定会再补充上来!ヽ( ̄▽ ̄)وpost

 

那么问题来了,有了“幂等”这个属性的加持,PUT操做和POST操做会产生什么区别?this

(请先思考30秒,大胆推测一下!(๑*◡*๑))idea

.spa

.rest

.server

.

.

.

公布“答案”(我本身的理解):对于相同资源,若是对同一资源反复进行PUT操做,是服务器是不会建立新的资源的,而是找到原有资源后去更新它。可是POST则会在每次提交后,无视以前的资源,建立新的资源

那么问题又来了,既然PUT和POST做用都差很少,对于web开发新手来讲,到底应该选择哪一种动做去更新资源或者建立资源??

(这个问题比刚才的难,请思考久一点ヾ(๑╹◡╹)ノ")

.

.

.

.

.

.

解释这个问题前,先看下比较权威的说明(When should we use PUT and when should we use POST?):

 

Use PUT when you can update a resource completely through a specific resource. For instance, if you know that an article resides at http://example.org/article/1234, you can PUT a new resource representation of this article directly through a PUT on this URL.

当您能够彻底更新已知的特定资源时,请使用PUT操做。例如,若是您知道一篇文章位于http://example.org/article/1234,那么您能够经过PUT操做直接将这篇文章新的资源表示放置到对应的URL(即http://example.org/article/1234)上。

 

If you do not know the actual resource location, for instance, when you add a new article, but do not have any idea where to store it, you can POST it to an URL, and let the server decide the actual URL.

若是您不知道实际的资源位置,例如,当您准备添加一篇新文章,可是不知道在具体要在哪里存储它,那么您能够将它POST到一个(大概的)URL,并让服务器决定它实际(具体)的URL。

 

上面这段文字若是不是很好理解的话,那我换个我本身理解后的表达来尝试解释一下:

由于PUT和POST均可以用来“建立”或者“更新”资源,因此咱们先将这两个动做分开来分析,先说建立好了。

若是你如今想发表一篇新文章,名字叫“Apple”,而后你明确的知道你的这篇文章发表后,能够访问到它的地址应该是 http://myarticle.com/article/apple ,那么你就能够使用PUT的方式,将你新发表的文章建立到 http://myarticle.com/article/apple 这个路径下;

可是若是如今你只知道你要发表的文章应该被放到 http://myarticle.com/article/ 这个路径下的某个位置,具体文章会被编号成什么你一点概念都没有,那你仍是选择POST方式吧,将文章POST到 http://myarticle.com/article/ 这个路径下,而后让服务器来告诉你建立好的新文章可访问的路径究竟是什么。

说完建立,更新也就好理解不少了。若是更新某个资源的时候,你知道这个资源的具体所在路径,那么就能够使用PUT方法,来用新资源彻底替换掉原来的资源。而POST方法嘛,天然就是在你不清楚你目前要更新的这个路径具体在什么位置,你只知道它大概在什么位置的时候使用。服务器会在接收到POST上来的资源的时候,在你给的大体路径中建立好这个资源的新的访问路径,而后把这个路径返回给你,对于不须要关心服务器中具体发生了什么的客户端来讲,最终达到的效果也是“更新”了原有的资源。

 

综上,绕了一大圈其实又回到了最初的“PUT(一般)用来更新资源,POST(通常)用来建立资源”这一认知上,不过如今比以前好一点,至少明白了为何PUT大多会用来更新资源,POST会常常用于建立资源了。

相关文章
相关标签/搜索