作为http(超文本传输协议)中的两种发送请求数据的方法,GET和POST的本质上都是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
说Get和Post之前简单了解http
它是基于请求响应的通信协议,客户端对服务器发出一个获取资源的请求,服务器将要求的资源应给客户端,每次的联合只作一次请求/响应,是一种很简单的通信协议,没有请求就没有响应。
但是在http协议之下,服务器会显得很健忘,因为服务器交互响应客户端之后,就不会记得客户端的信息,所以更不会去维护与客户端有关的状态,因此http又成为无状态的通信协议。
下面说说Get与Post
在用途上的区别
· get是从服务器上获取数据
· post是向服务器传送数据
在安全性上的区别
· get是通过URL请求传递用户所输入的信息内容,这些信息内容在提交的过程中都会暴露在浏览器的地址栏中,所以说安全性极低。
· 相反post不会将提交的内容暴露在浏览器地址栏中,相比get是安全的。
两者的长度限制
· get在请求提交数据参数时浏览器与服务器对URL(统一资源定位符)都有长度的限制,下面看看几种常用的浏览器的长度限制:
1. IE:最大长度限制为2083字节。
2. firefox:最大长度限制为65536字节。
3. chrome:最大长度限制为8182字节。
· post没有长度限制。
幂等性(如果一个操作没有副作用,或者多次操作对资源产生的副作用相同,我们就说这个操作是幂等的)
· get方法获取资源,没有副作用,所以是幂等的
· post用于创建资源,是有副作用的,且副作用不同,所以post不是幂等的
举个例子:
就是使用手机支付功能,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。这就是副作用的体现。