普通區(qū)別
1.get 把參數(shù)包含在URL中糟把,POST通過(guò) request boby傳遞參數(shù) 袜炕。
2.get在瀏覽器回退時(shí)是無(wú)害的麻诀,而post會(huì)再次提交請(qǐng)求锭吨。
3.get產(chǎn)生的URL地址可以被bookmark蠢莺,而post不可以。
4.get請(qǐng)求會(huì)被瀏覽器主動(dòng)cache零如,而post不會(huì)躏将,除非手動(dòng)設(shè)置。
5.get請(qǐng)求只能進(jìn)行url編碼考蕾,而post支持多種編碼方式祸憋。
6.get請(qǐng)求參數(shù)會(huì)被完整保留在瀏覽器歷史記錄里,而post中的參數(shù)不會(huì)被保留肖卧。
7.在瀏覽器請(qǐng)求中蚯窥,get請(qǐng)求在url中傳送的參數(shù)是有長(zhǎng)度限制的,而post沒(méi)有。
8.對(duì)參數(shù)的數(shù)據(jù)類型拦赠,get只授受ASCII字符巍沙,而post沒(méi)有限制。
9.get比post更不安全荷鼠,參數(shù)直接暴露在URL上句携,不能傳遞敏感信息。
10.get參數(shù)通過(guò)URL傳遞允乐,post放在Request body中矮嫉。
最重要的知識(shí)點(diǎn)來(lái)了
get產(chǎn)生一個(gè)TCP數(shù)據(jù)包;post產(chǎn)生兩個(gè)TCP數(shù)據(jù)包牍疏。
get方式請(qǐng)求蠢笋,瀏覽器會(huì)把http header 和data一并發(fā)送出去,服務(wù)器響應(yīng)200(返回?cái)?shù)據(jù))
post方式請(qǐng)求麸澜,瀏覽器先發(fā)送header挺尿,服務(wù)器響應(yīng)100 continue奏黑,瀏覽器再發(fā)送data炊邦,服務(wù)器響應(yīng)200 OK(返回?cái)?shù)據(jù))
也就是說(shuō),GET只需要汽車跑一趟就把貨送到了熟史,而POST得跑兩趟馁害,第一趟,先去和服務(wù)器打個(gè)招呼“嗨蹂匹,我等下要送一批貨來(lái)碘菜,你們打開(kāi)門迎接我”,然后再回頭把貨送過(guò)去限寞。
因?yàn)镻OST需要兩步忍啸,時(shí)間上消耗的要多一點(diǎn),看起來(lái)GET比POST更有效履植。因此Yahoo團(tuán)隊(duì)有推薦用GET替換POST來(lái)優(yōu)化網(wǎng)站性能计雌。但這是一個(gè)坑!跳入需謹(jǐn)慎玫霎。為什么凿滤?
1. GET與POST都有自己的語(yǔ)義,不能隨便混用庶近。
2. 據(jù)研究翁脆,在網(wǎng)絡(luò)環(huán)境好的情況下,發(fā)一次包的時(shí)間和發(fā)兩次包的時(shí)間差別基本可以無(wú)視鼻种。而在網(wǎng)絡(luò)環(huán)境差的情況下反番,兩次包的TCP在驗(yàn)證數(shù)據(jù)包完整性上,有非常大的優(yōu)點(diǎn)。
3. 并不是所有瀏覽器都會(huì)在POST中發(fā)送兩次包罢缸,F(xiàn)irefox就只發(fā)送一次校读。