get與post有何區(qū)別贩汉?看似簡單的問題卻會困擾前端小白很久很久覆获。
更是面試官必提問題之一干跛。常見的區(qū)別我們都能說出一二钝诚,例如:
a) GET的數(shù)據(jù)在 URL 中對所有人都是可見的。POST的數(shù)據(jù)不會顯示在 URL 中僚饭。
b) GET對數(shù)據(jù)長度有限制泳挥,當(dāng)發(fā)送數(shù)據(jù)時琅关,GET 方法向 URL 添加數(shù)據(jù)啦租;URL 的長度是受限制的(URL 的最大長度是 2048 個字符)哗伯。POST無限制。
c) GET可收藏為書簽篷角,POST不可收藏為書簽焊刹。
d) GET后退按鈕/刷新無影響,POST數(shù)據(jù)會被重新提交(瀏覽器應(yīng)該告知用戶數(shù)據(jù)會被重新提交)恳蹲。
e) GET編碼類型application/x-www-form-url伴澄,POST編碼類型encodedapplication/x-www-form-urlencoded 或 multipart/form-data。為二進(jìn)制數(shù)據(jù)使用多重編碼阱缓。
f) GET歷史參數(shù)會保留在瀏覽器歷史中。POST參數(shù)不會保存在瀏覽器歷史中举农。
g) GET只允許 ASCII 字符荆针。POST沒有限制。也允許二進(jìn)制數(shù)據(jù)颁糟。
h) 與 POST 相比航背,GET 的安全性較差,因為所發(fā)送的數(shù)據(jù)是 URL 的一部分棱貌。在發(fā)送密碼或其他敏感信息時絕不要使用 GET 玖媚!POST 比 GET 更安全,因為參數(shù)不會被保存在瀏覽器歷史或 web 服務(wù)器日志中婚脱。
初入前端今魔,對于這個問題很是不解勺像,百度給出的答案也是五花八門,始終是不得其深意错森。在眾多大神的解釋中吟宦,個人覺得有一個比喻很不錯。
在我大萬維網(wǎng)世界中涩维,TCP就像汽車殃姓,我們用TCP來運(yùn)輸數(shù)據(jù),它很可靠瓦阐,從來不會發(fā)生丟件少件的現(xiàn)象蜗侈。但是如果路上跑的全是看起來一模一樣的汽車,那這個世界看起來是一團(tuán)混亂睡蟋,送急件的汽車可能被前面滿載貨物的汽車攔堵在路上踏幻,整個交通系統(tǒng)一定會癱瘓。為了避免這種情況發(fā)生薄湿,交通規(guī)則HTTP誕生了叫倍。HTTP給汽車運(yùn)輸設(shè)定了好幾個服務(wù)類別,有GET, POST, PUT, DELETE等等豺瘤,HTTP規(guī)定吆倦,當(dāng)執(zhí)行GET請求的時候,要給汽車貼上GET的標(biāo)簽(設(shè)置method為GET)坐求,而且要求把傳送的數(shù)據(jù)放在車頂上(url中)以方便記錄蚕泽。如果是POST請求,就要在車上貼上POST的標(biāo)簽桥嗤,并把貨物放在車廂里须妻。當(dāng)然,你也可以在GET的時候往車廂內(nèi)偷偷藏點貨物泛领,但是這是很不光彩荒吏;也可以在POST的時候在車頂上也放一些數(shù)據(jù),讓人覺得傻乎乎的渊鞋。HTTP只是個行為準(zhǔn)則绰更,而TCP才是GET和POST怎么實現(xiàn)的基本。
在我大萬維網(wǎng)世界中锡宋,還有另一個重要的角色:運(yùn)輸公司儡湾。不同的瀏覽器(發(fā)起http請求)和服務(wù)器(接受http請求)就是不同的運(yùn)輸公司。 雖然理論上执俩,你可以在車頂上無限的堆貨物(url中無限加參數(shù))徐钠。但是運(yùn)輸公司可不傻,裝貨和卸貨也是有很大成本的役首,他們會限制單次運(yùn)輸量來控制風(fēng)險尝丐,數(shù)據(jù)量太大對瀏覽器和服務(wù)器都是很大負(fù)擔(dān)显拜。業(yè)界不成文的規(guī)定是,(大多數(shù))瀏覽器通常都會限制url長度在2K個字節(jié)摊崭,而(大多數(shù))服務(wù)器最多處理64K大小的url讼油。超過的部分,恕不處理呢簸。如果你用GET服務(wù)矮台,在request body偷偷藏了數(shù)據(jù),不同服務(wù)器的處理方式也是不同的根时,有些服務(wù)器會幫你卸貨瘦赫,讀出數(shù)據(jù),有些服務(wù)器直接忽略蛤迎,所以确虱,雖然GET可以帶request body,也不能保證一定能被接收到哦替裆。
原文鏈接https://www.cnblogs.com/logsharing/p/8448446.html
這一比喻校辩,很形象的對get和post作出了解釋,包括安全性辆童,長度限制等宜咒,能夠讓人更透徹的理解。
————愿你在迷茫時把鉴,堅信你的珍貴故黑,愛你所愛,行你所行庭砍,聽從你心场晶,無問西東。