GET在瀏覽器回退時(shí)是無(wú)害的是越,而POST會(huì)再次提交請(qǐng)求。
GET產(chǎn)生的URL地址可以被Bookmark染坯,而POST不可以均芽。
GET請(qǐng)求會(huì)被瀏覽器主動(dòng)cache,而POST不會(huì)单鹿,除非手動(dòng)設(shè)置掀宋。
GET請(qǐng)求只能進(jìn)行url編碼,而POST支持多種編碼方式。
GET請(qǐng)求參數(shù)會(huì)被完整保留在瀏覽器歷史記錄里劲妙,而POST中的參數(shù)不會(huì)被保留湃鹊。
GET請(qǐng)求在URL中傳送的參數(shù)是有長(zhǎng)度限制的,而POST么有镣奋。
對(duì)參數(shù)的數(shù)據(jù)類型币呵,GET只接受ASCII字符,而POST沒(méi)有限制侨颈。
GET比POST更不安全余赢,因?yàn)閰?shù)直接暴露在URL上,所以不能用來(lái)傳遞敏感信息肛搬。
GET參數(shù)通過(guò)URL傳遞没佑,POST放在Request body中。
GET和POST本質(zhì)上就是TCP鏈接温赔,并無(wú)差別蛤奢。但是由于HTTP的規(guī)定和瀏覽器/服務(wù)器的限制,導(dǎo)致他們?cè)趹?yīng)用過(guò)程中體現(xiàn)出一些不同陶贼。
GET產(chǎn)生一個(gè)TCP數(shù)據(jù)包啤贩;POST產(chǎn)生兩個(gè)TCP數(shù)據(jù)包。
長(zhǎng)的說(shuō):
對(duì)于GET方式的請(qǐng)求拜秧,瀏覽器會(huì)把http header和data一并發(fā)送出去痹屹,服務(wù)器響應(yīng)200(返回?cái)?shù)據(jù));
而對(duì)于POST枉氮,瀏覽器先發(fā)送header志衍,服務(wù)器響應(yīng)100 continue,瀏覽器再發(fā)送data聊替,服務(wù)器響應(yīng)200 ok(返回?cái)?shù)據(jù))楼肪。
GET與POST都有自己的語(yǔ)義,不能隨便混用惹悄。
據(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)当纱。
并不是所有瀏覽器都會(huì)在POST中發(fā)送兩次包呛每,F(xiàn)irefox就只發(fā)送一次。