POST和GET区别
首先,要明确一点
POST和GET是HTTP请求的两种方式,都可实现将数据从浏览器向服务器发送带参数的请求。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
HTTP请求底层协议都是TCP/IP,所以两者没有本质的区别。
POST和GET的区别
HTTP中的幂等和副作用
副作用
指对服务器上的资源做改变,搜索是无副作用的,注册是副作用的
幂等
指一次和多次请求某一个资源应该具有同样的副作用
- HTTP GET方法用于获取资源,不应有副作用,所以是幂等的,强调的是一次和N次具有相同的副作用,而不是每次GET的结果相同。GET请求可能会每次得到不同的结果,但它本身并没有产生任何副作用,因而是满足幂等性的。
- POST所对应的URI并非创建的资源本身,而是资源的接收者。比如新发表一个帖子,发送两个post请求会创建两份资源,具有不同的url,所以,POST方法不具备幂等性
区别
-
Get多用于无副作用,幂等,例如搜索,Post多用于有副作用,不幂等:例如注册
-
GET产生一个TCP
数据包
;POST产生两个TCP数据包(先发送header,再发送data) -
URL有
长度限制
,会影响 Get 请求,但是这个长度限制是浏览器规定的 -
对参数的
数据类型
,GET只接受ASCII字符,而POST没有限制。 -
GET参数通过URL传递,POST放在Request body中。
-
GET请求会被浏览器主动
cache
,而POST不会,除非手动设置。 -
GET请求只能进行url编码,而POST支持多种
编码方式
。 -
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。但抓包情况下都是一样的