get和post的區(qū)別?
1)get請(qǐng)求是通過(guò)給url添加查詢字符串發(fā)送請(qǐng)求參數(shù),不安全;post請(qǐng)求是通過(guò)請(qǐng)求體發(fā)送的,安全性比較高。
2)get在瀏覽器回退時(shí)不用發(fā)送請(qǐng)求,而post會(huì)再次提交請(qǐng)求。
3)get請(qǐng)求參數(shù)的url地址可以被bookmark(添加為書(shū)簽),而Post不可以。
4)get請(qǐng)求會(huì)被瀏覽器自動(dòng)cache,post請(qǐng)求不會(huì),除非手動(dòng)設(shè)置。
5)get請(qǐng)求只能進(jìn)行url編碼,而post支持多種編碼方式。
6)get請(qǐng)求在url中傳送的參數(shù)是有長(zhǎng)度限制的(大概255字節(jié)),而post沒(méi)有限制。
其實(shí)post和get在本質(zhì)上沒(méi)有區(qū)別,都是TCP鏈接,但是由于HTTP的規(guī)定和瀏覽器/服務(wù)器的限制,導(dǎo)致他們?cè)趹?yīng)用過(guò)程中體現(xiàn)出一些不同。
get和post最大的區(qū)別:
get產(chǎn)生了一TCP數(shù)據(jù)包,post產(chǎn)生兩個(gè)TCP數(shù)據(jù)包。
對(duì)于get請(qǐng)求,瀏覽器會(huì)報(bào)http header和data一并發(fā)送出去,服務(wù)器響應(yīng)200返回?cái)?shù)據(jù);
而對(duì)于post請(qǐng)求,瀏覽器會(huì)先發(fā)送header,服務(wù)器響應(yīng)100continue,瀏覽器再發(fā)送data,服務(wù)器響應(yīng)200返回?cái)?shù)據(jù)。
因此有人認(rèn)為可以將post請(qǐng)求換位get來(lái)優(yōu)化網(wǎng)站的性能,其實(shí)是不可以的。原因如下:
1)get和post都有自己的語(yǔ)義,不能混用。
2)網(wǎng)絡(luò)環(huán)境好的時(shí)候,發(fā)送一次包和發(fā)送兩次包事件的差別基本可以無(wú)視,而在網(wǎng)絡(luò)環(huán)境差的情況下,兩次包的TCP在驗(yàn)證數(shù)據(jù)包的完整性上,有非常大的優(yōu)勢(shì)。
3)并不是所有瀏覽器都會(huì)在post中發(fā)送兩次包,firefox就只發(fā)送一次。