【網(wǎng)絡(luò)面試題】請(qǐng)說(shuō)下GET和POST的區(qū)別?


當(dāng)面試官問(wèn)起GET和POST的區(qū)別時(shí),我們要先確定,這里的GET和POST是基于什么前提的?
如果什么前提都沒(méi)有,也就是不用任何規(guī)范限制的話,我們只考慮語(yǔ)法來(lái)說(shuō),這兩個(gè)方式是沒(méi)有任何區(qū)別的,只有名字不一樣。
如果是基于RFC規(guī)范的,那么問(wèn)題就又來(lái)了。是基于RFC理論的,還是基于具體的實(shí)現(xiàn)的。
(1)如果是基于RFC理論的,我們稱這個(gè)為Specification(規(guī)范)。那么GET和POST是具有相同的語(yǔ)法,但是不具備相同的語(yǔ)義,GET方式用作獲取信息,POST方式用作發(fā)送信息。
(2)如果是基于RFC的具體實(shí)現(xiàn)的,我們稱之為implementation(實(shí)施)。其實(shí)要區(qū)分是具體的哪一種實(shí)現(xiàn)。我們通常默認(rèn)指的是瀏覽器實(shí)現(xiàn)的RFC。當(dāng)然不止瀏覽器,我們?nèi)魏稳硕伎梢栽O(shè)計(jì)一個(gè)HTTP協(xié)議的接口,使用RFC規(guī)范,當(dāng)然這些是我們不用考慮的,因?yàn)椴⒉煌ㄓ谩?/p>
所以我們只需要考慮瀏覽器實(shí)現(xiàn)的RFC,或者說(shuō)Web環(huán)境下的RFC。這個(gè)前提下的答案,就是我們最常見(jiàn)的那些。我就簡(jiǎn)單的列舉在下面了~
GET的數(shù)據(jù)在 URL 中對(duì)所有人都是可見(jiàn)的。POST的數(shù)據(jù)不會(huì)顯示在 URL 中。
GET對(duì)數(shù)據(jù)長(zhǎng)度有限制,當(dāng)發(fā)送數(shù)據(jù)時(shí),GET 方法向 URL 添加數(shù)據(jù);URL 的長(zhǎng)度是受限制的(URL 的最大長(zhǎng)度是 2048 個(gè)字符)。POST無(wú)限制。
GET可收藏為書(shū)簽,POST不可收藏為書(shū)簽。
GET后退按鈕/刷新無(wú)影響,POST數(shù)據(jù)會(huì)被重新提交(瀏覽器應(yīng)該告知用戶數(shù)據(jù)會(huì)被重新提交)。
GET編碼類型application/x-www-form-url,POST編碼類型encodedapplication/x-www-form-urlencoded 或 multipart/form-data。為二進(jìn)制數(shù)據(jù)使用多重編碼。
GET歷史參數(shù)會(huì)保留在瀏覽器歷史中。POST參數(shù)不會(huì)保存在瀏覽器歷史中。
GET只允許 ASCII 字符。POST沒(méi)有限制。也允許二進(jìn)制數(shù)據(jù)。
與 POST 相比,GET 的安全性較差,因?yàn)樗l(fā)送的數(shù)據(jù)是 URL 的一部分。在發(fā)送密碼或其他敏感信息時(shí)絕不要使用 GET !POST 比 GET 更安全,因?yàn)閰?shù)不會(huì)被保存在瀏覽器歷史或 web 服務(wù)器日志中。
以上這些點(diǎn)都是我們常見(jiàn)的,還有一些我們不常見(jiàn)的,比如GET請(qǐng)求只會(huì)有一次TCP連接,而POST請(qǐng)求會(huì)有兩次TCP連接。
所以在我們不要認(rèn)為GET和POST請(qǐng)求有什么區(qū)別是一個(gè)很簡(jiǎn)單的問(wèn)題哦~很多簡(jiǎn)單的問(wèn)題背后都有著很復(fù)雜的背景。
?? 最后
當(dāng)然也可以關(guān)注我的公眾號(hào):「前端獵手」,或是添加我的微信(wKavin)私底下進(jìn)行交流。
