- get和post本質(zhì)上并沒(méi)有區(qū)別
get和post是HTTP協(xié)議中兩種請(qǐng)求方法
HTTP的底層是TCP/IP焚廊。所以get和 post的底層也是TCP連接。get和post能做的事情是一樣的撒蟀。如果給get加上request body,給post加上url采納數(shù)温鸽,技術(shù)上是可以的保屯。
HTTP只是個(gè)行為準(zhǔn)則,TCP才是get和post怎么實(shí)現(xiàn)的基本涤垫。
不同的瀏覽器和服務(wù)器就是不同的運(yùn)輸公司姑尺。為了保證單次運(yùn)輸?shù)馁|(zhì)量,會(huì)限制每次的運(yùn)輸量蝠猬,大多數(shù)瀏覽器通常會(huì)限制url長(zhǎng)度在2k個(gè)字節(jié)切蟋,而大多數(shù)服務(wù)器最多處理64k大小的url。超過(guò)的部分不會(huì)處理榆芦。如果你用get服務(wù)柄粹,在requestbody里偷偷藏了數(shù)據(jù),不同服務(wù)器的處理方式也是不同的匆绣,有些服務(wù)器會(huì)幫你卸貨驻右,讀出數(shù)據(jù),有些服務(wù)器直接忽略犬绒。所以旺入,雖然get可以帶requestbody,也不能保證一定被接收到凯力。
- get和post的一個(gè)重大區(qū)別
get產(chǎn)恒一個(gè)TCP數(shù)據(jù)包茵瘾,post產(chǎn)生兩個(gè)TCP數(shù)據(jù)包。對(duì)于get方式的請(qǐng)求咐鹤,瀏覽器會(huì)把http header和data一并發(fā)送出去拗秘,服務(wù)器響應(yīng)200返回?cái)?shù)據(jù)。對(duì)于post祈惶,瀏覽器先發(fā)送hedaer雕旨,服務(wù)器響應(yīng)100 continue扮匠,瀏覽器再發(fā)送data,服務(wù)器響應(yīng)200 ok(返回?cái)?shù)據(jù))
因?yàn)閜ost需要兩步凡涩,時(shí)間上消耗的多一點(diǎn)棒搜,看起來(lái)get比post更有效。但是get和post都有自己的語(yǔ)義活箕,不能隨便混用力麸。據(jù)研究,網(wǎng)絡(luò)環(huán)境好的情況下育韩,發(fā)一次包的時(shí)間和發(fā)兩次包的時(shí)間差別基本可以無(wú)視克蚂。而在網(wǎng)絡(luò)環(huán)境差的情況下,兩次包的tcp在驗(yàn)證數(shù)據(jù)包的完整性上筋讨,有非常大的有點(diǎn)埃叭。并不是所有的瀏覽器都會(huì)在post中發(fā)送兩次包,firefox只發(fā)一次悉罕。