post与get请求的区别
http定义了多种与服务器交互的方式,其中最基本的四种是post, delete, put, get。而一个符合RESTful标准的URL,应该是代表的某一个具体的资源或者是资源的集合。这四种基本类型则对应着对资源的四种不同动作,也就是我们通常所说的增,删,改,查。
但是,无论是get或者post我们总是能在发送请求的时候提供参数,只是server端的接受方式不一样而已,或者是在body里,或者是在query里,或者是在params里。所以单纯的从请求结果来看,get与post是没有什么区别的。但是,这仅仅是从表面上来看,当我们本着透过现象看本质的精神来看的时候,总是能看出点什么不同。
首先,要探讨两者的区别我们要了解两个基本的概念。幂等和副作用。
幂等
幂等是一个数学或计算机学概念,常见于抽象代数中,其定义如下。
对于单目运算,如果一个运算对于在范围内的所有的一个数多次进行该运算所得的结果和进行一次该运算所得的结果是一样的,那么我们就称该运算是幂等的。比如绝对值运算就是一个例子,在实数集中,有abs(a) =abs(abs(a)) 。
对于双目运算,则要求当参与运算的两个值是等值的情况下,如果满足运算结果与参与运算的两个值相等,则称该运算幂等,如求两个数的最大值的函数,有在在实数集中幂等,即max(x, y) = x 。
而从http角度来说,所谓幂等就是同一个请求发送N次,服务器上资源的状态最终是一致的。比如说新发一个帖子,很显然它不是幂等的,因为当我们调用N次这同一个接口的时候会创建N个帖子。但是,发帖子这个api,我们既可以用get来完成也可以用post来完成。
当然,根据HTTP规范get请求应该是用来获取信息,而post请求则是可能在服务器上新增或者修改资源。所以,我们一般在新增帖子的时候,都是用post来发送的,所以认为,post是非幂等的,而get是幂等的。
副作用
副作用是指当你执行了一个http操作后,网站上的资源是没有被修改的,此时我们可以认为这个操作是没有副作用的,比如说get请求,相对来看post,put,delete则是有副作用的。
URL的长度限制
所谓的get请求的长度限制其实是由各大浏览器厂商限制的,HTTP协议不对URL的长度作事先的限制,所以在新增数据的时候尽量使用post请求。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。