从应用层来看:
-
get和post都是http协议发送请求的方法,
-
get把参数放在url中,因此更容易暴露数据,但是url长度有限制,浏览器最大能处理2K
-
post把数据放在body中
-
get请求回被浏览器主动cache,并且浏览器的回退是无害的,post则需要重新请求
-
在报文格式上:
- 不带参数时:报文仅仅第一行方法名不同,一个是get一个是post
- 带参数时:get方法的参数放在url中,post方法参数放在body中
从传输层来看
除了应用层,底层两者并无本质区别,都是通过tcp传输数据。
给get的body中带数据也完全没问题但是由于浏览器和http协议限制导致不能这么干,应用上呈现不同的形式
-
get请求只发送一个tcp包,将header和data同时发送
-
post发送两个tcp包,先发送header回应100continue再发送data
-
某些浏览器post也可能只发一个包