联系:
-
无论是Get还是Post,均为Http协议中发送请求的方式之一,众所周知,Http的底层是TCP/IP,那么沿着这个思路来讲,Get或Post底层上也是TCP连接(俗称握手),所以从其设计本质上来讲并无较大区别;
-
在请求参数的设定上,约定俗称的是Get通过URL拼接requestParam来发送请求,而Post通过requestBody来封装参数并发送请求。这么做的方式其实是利用了类似语义的方式来区分二者的作用,即通过Get来获取服务器上的资源,通过Post来发送或上传资源至服务器上。但是其实无论是Get或Post均可以利用URL拼接或requestBody的方式去进行请求,这个在技术上是完全行得通的。
-
Get或Post的不同的请求特点其实并不是他们自身去设定的而产生的,而是由Http、浏览器、服务器这三个玩意的限制才产生了Get和Post的差异(例如传递参数长度的限制)。那么从二者的本质TCP连接来看差异,也就所产生的数据包的发送个数或成为一个重要的区别。
区别:
- Get请求产生一个TCP数据包;Post产生两个TCP数据包;
- 对于Get方式的请求,浏览器会把Http的请求头header和data一并发送出去,服务器响应200(返回数据);而Post方式的请求是,浏览器先发送header,服务器响应100 continue,然后浏览器再发送data,服务器响应200 OK(返回数据);
- 从效率上来看,Get比Post更高效,因为一趟就结束了,当然这只是在网络环境差的状况下;但是好的网络状况下发送一次包的时间和发送两次包的时间差别基本可以无视;
- 并非所有浏览器都会在Post请求中发送两次数据包,要根据具体情况具体分析,比如火狐浏览器在Post请求中就只发送一次数据包;
以上内容是对Get与Post的联系和区别的一个分析和总结,这里并没有过多的去讨论二者在经过Http、浏览器、服务器三者的限制后所产生的一些区别,而是从本质的层次上即TCP连接层面上去分析。