最直观的是 :
get将所要传送的数据,包裹在url中
post则是将数据放入request body中
【get会暴露敏感信息】
本质的区别是,
get和post都是http(基于tcp/ip的关于数据如何在万维网中如何通信的协议)中两种发送请求的方法。
get产生一个tcp数据包,而post产生两个。
对于get请求,浏览器会将『http header与data』一起发送给服务器服务器返回200
post,浏览器会先将『http header』发送至服务器,服务器返回100 continue,浏览器在发送data,服务器响应200,返回数据
【备注】并不是所有浏览器的post都发送两次,例如ff就只发一次。
这个时候想去扯点TCP协议中的三次握手和四次握手
第一次握手:client向server发送请求连接的报文
第二次:server接受连接后回复ack报文
第三次:clinet接收ack报文后向server发送ack报文,并分配资源,这tcp连接就建立了。
【中断连接端可以是client,也可以是server。毕竟谁都可以叫停。上图为分手需要完成的四次握手】
第一次握手:client向server发送中断链接请求,发送FIN报文。表达:我要跟你分手啦,你还有没有什么话要说,如果还有,就不必急着同意,可以继续说,或者发送数据。
第二次握手:发送ACK。表达:我听到你要跟我分手了,但我心有不忍,我要准备一下。请你等等我。【这个时候,client进入fin_wait状态,继续等待server端的fin报文】
第三次握手:server考虑好了,觉得挽留无意。说完要说的话,为client做完要做的事,向cllient发送FIN报文,告诉client,我话都说完,可以为你做的事也做完,放你自由。我准备关闭自己的连接了。
第四次握手:client收到fin报文后,知道server同意分开,但client不相信网络,怕server不知道要关闭,所以发送ack进入time_wait状态,如果server没有收到ack,会重传。server收到ack后,就真的彻底断开连接了。
cliient发送分手的状态:
server发送分手的状态:
最后我还要扯一下ajax总get和post的区别:
get方式:
传送简单的数据,大小控制在1KB以内,数据追加到url中发送。
同时会被客户端浏览器缓存数据,别人可以从浏览器的历史记录中读取客户数据。这多不安全。
post方式:
使用post方式时,将数据放在request body中发送,所以其数据量比get多。
最后:宝宝通常把get用来获取数据,post用于提交数据。