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



    (这篇文章排版好乱,但是懒癌发作的我现在暂时不想管了……_(:з」∠)_)

    这个算是HTTP协议中最最最最基本的概念之一了吧,但是今天才意识到原来之前一直没有彻底搞懂过。(当然我觉得虽然现在比之前理解多一点了,但是还没有彻彻底底搞明白orz...)

    所以啊,为了长点记性,还是记录一下吧。

    之前自己对PUT和POST这两个动作的理解呢,只停留在“PUT用来更新资源,POST用来创建资源”这种浅显又有问题的认知上。

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

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

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

    .

    .

    .

    .

    .

    .

    公布“答案”(我自己的理解):对于相同资源,如果对同一资源反复进行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会经常用于创建资源了。

  • 相关阅读:
    Java内存模型(JMM)
    线程安全问题的本质详解: 原子性、有序性、可见性
    Quartz实现分布式可动态配置的定时任务
    Java引用详解-StrongReference SoftReference WeakReference PhantomReference
    流行的报表生成工具-JXLS
    Java线程监控及中断
    IntelliJ IDEA 内存优化最佳实践
    Dapeng框架-开源高性能分布式微服务框架
    Scala实现Try with resources自动关闭IO
    Jvm启动,关闭及对应钩子
  • 原文地址:https://www.cnblogs.com/cloudland0716/p/10336835.html
Copyright © 2020-2023  润新知