put和post的区别

1.什么是幂等性

幂等性概念:幂等通俗来说是指不管进行多少次重复操作,都是实现相同的结果。

2.REST请求中哪些是幂等操作

GET,PUT,DELETE都是幂等操作,而POST不是,以下进行分析:

首先GET请求很好理解,对资源做查询多次,此实现的结果都是一样的。 
PUT请求的幂等性可以这样理解,将A修改为B,它第一次请求值变为了B,再进行多次此操作,最终的结果还是B,与一次执行的结果是一样的,所以PUT是幂等操作。 
同理可以理解DELETE操作,第一次将资源删除后,后面多次进行此删除请求,最终结果是一样的,将资源删除掉了。

POST不是幂等操作,因为一次请求添加一份新资源,二次请求则添加了两份新资源,多次请求会产生不同的结果,因此POST不是幂等操作。

3 根据幂等性区分POST与PUT的使用

了解REST后很长一段时间不能明确区分PUT和POST的区别,在使用时很容易混淆,完全可根据idempotent(幂等性)做区分。

举一个简单的例子,假如有一个博客系统提供一个Web API,模式是这样http://superblogging/blogs/{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方法。

(以上是我转载的,原文地址https://blog.csdn.net/xcc_2269861428/article/details/80433382

另外附上get和post的区别:

1. GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的;GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同

2.  GET请求在URL中传送的参数是有长度限制的,虽然GET可以带request body,也不能保证一定能被接收到

3. GET产生一个TCP数据包;POST产生两个TCP数据包;对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据);在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点;并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次

猜你喜欢

转载自blog.csdn.net/bd2569/article/details/84868980