HTTP协议中PUT和POST使用上的区别

原创 2015年07月08日 19:57:17


先说答案:

有区别,看服务器端怎么写的。不idempotent 时用 post ,等幂 idempotent时用put

大多数情况谈用post ,其实可以理解为post 创建,put 更新!!!



有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源;有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源;还有的观点认为可以用PUT和POST中任何一个来做创建或者更新一个资源。这些观点都只看到了风格,争论起来也只是争论哪种风格更好,其实,用PUT还是POST,不是看这是创建还是更新资源的动作,这不是风格的问题,而是语义的问题。

 

在HTTP中,PUT被定义为idempotent的方法,POST则不是,这是一个很重要的区别。

 

“Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request.”

 

上面的话就是说,如果一个方法重复执行多次,产生的效果是一样的,那就是idempotent的。

 

举一个简单的例子,假如有一个博客系统提供一个Web API,模式是这样http://superblogging/blogs/post/{blog-name},很简单,将{blog-name}替换为我们的blog名字,往这个URI发送一个HTTP PUT或者POST请求,HTTP的body部分就是博文,这是一个很简单的REST API例子。我们应该用PUT方法还是POST方法?取决于这个REST服务的行为是否是idempotent的,假如我们发送两个http://superblogging/blogs/post/Sample请求,服务器端是什么样的行为?如果产生了两个博客帖子,那就说明这个服务不是idempotent的,因为多次使用产生了副作用了嘛;如果后一个请求把第一个请求覆盖掉了,那这个服务就是idempotent的。前一种情况,应该使用POST方法,后一种情况,应该使用PUT方法。

 

也许你会觉得这个两个方法的差别没什么大不了的,用错了也不会有什么问题,但是你的服务一放到internet上,如果不遵从HTTP协议的规范,就可能给自己带来麻烦。比如,没准Google Crawler也会访问你的服务,如果让一个不是indempotent的服务可以用indempotent的方法访问,那么你服务器的状态可能就会被Crawler修改,这是不应该发生的。

HTTP协议中PUT和POST使用区别

有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源;有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源;还有的观点认为可以用PUT和POST中任何一个来做创建或者更新一...
  • mad1989
  • mad1989
  • 2012年08月29日 01:11
  • 66952

HTTP协议中PUT和POST使用区别

HTTP类型http协议类型有8种,分别是: OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*’的请求来测试服务器的功能性。 HEAD:向服务器索...

HTTP协议中PUT和POST使用区别

HTTP协议中PUT和POST使用区别

(转载)HTTP协议中PUT和POST使用区别

原文 有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源;有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源;还有的观点认为可以用PUT和POST中任何一个来做创建或...

HTTP协议中PUT和POST使用区别

有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源;有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源;还有的观点认为可以用PUT和POST中任何一个来做创建或者更新一...

HTTP协议中PUT和POST使用上的区别

http://hi.baidu.com/%CE%A2%D0%A6%C0%E1%CB%AE/blog/item/84fd8e3d93944350241f14cc.html     有的观点认为,应...

HTTP协议中PUT和POST使用上的区别

有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源;有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源;还有的观点认为可以用PUT和POST中任何一个来做创建或者更新一...

深入理解 HTTP 协议 POST 与PUT 方法区别

概况 PUT与POST 基本区别反映在Request-URI  的不同意义,PUT  是属于幂等性的方法,提交相同的内容不管提交几次返回的内容都相同,而POST 方法不具有这一属性。 例如:某...

解析HTTP协议六种请求方法:get,head,put,delete,post有什么区别

标准Http协议支持六种请求方法,即: 1、GET 2、POST 3、PUT 4、Delete 5、HEAD 6、Options 但其实我们大部分情况下只用到了GET和POST。如果想设...

浅析HTTP协议六种请求方法(get,head,put,delete,post)

浅析HTTP协议六种请求方法(get,head,put,delete,post)标准Http协议支持六种请求方法,即:1、GET 2、POST 3、PUT 4、Delete 5、HEAD 6、Opti...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HTTP协议中PUT和POST使用上的区别
举报原因:
原因补充:

(最多只允许输入30个字)