GET與POST的真正區(qū)別

  我們會(huì)經(jīng)沉咝撸看到有人問(wèn):http協(xié)議中GET請(qǐng)求和POST請(qǐng)求有什么區(qū)別~?

  這個(gè)問(wèn)題看似很簡(jiǎn)單端仰,但是不同程度的人會(huì)回答出不同的結(jié)果橡伞。在公司的面試中盒揉,也會(huì)經(jīng)常的問(wèn)及類似這樣的問(wèn)題,看似很簡(jiǎn)單兑徘,但是不同層次的人會(huì)回答出不同的結(jié)果刚盈。那么我們今天就來(lái)聊聊HTTP協(xié)議中GET與POST的真正區(qū)別。

  我們還是要用一句簡(jiǎn)練的話來(lái)回答GET和POST的區(qū)別:

  提及GET和POST的區(qū)別挂脑,一定要確定基于什么前提藕漱。在不同的前提下有不同的答案。

  這么簡(jiǎn)單的GET和POST背后有什么神秘的面紗呢崭闲?我們今天依然用鄧哥的例子來(lái)講給大家~

  鄧哥家住在吃雞村肋联,鄧嫂家住在農(nóng)藥屯。鄧哥到鄧嫂家可以有很多種選擇镀脂,走著去牺蹄、駕車去、坐火車去等等薄翅。鄧哥通常選擇駕車過(guò)去沙兰。

  這里吃雞村和農(nóng)藥屯就相當(dāng)于是互聯(lián)網(wǎng)中的兩臺(tái)計(jì)算機(jī),鄧哥和鄧嫂相當(dāng)于是這兩臺(tái)計(jì)算機(jī)中的兩個(gè)程序翘魄,這兩個(gè)程序之間想要通信可以有很多種協(xié)議鼎天,就好比有很多種交通方式可以到達(dá)。我們假設(shè)駕車這種方式就是網(wǎng)絡(luò)中的HTTP協(xié)議暑竟。

  鄧哥家有兩輛車斋射,一輛轎車,一輛箱式貨車但荤。

  兩種車就好比是HTTP協(xié)議中的兩種方式罗岖,我們假設(shè)轎車是GET請(qǐng)求方式,箱式貨車是POST請(qǐng)求方式腹躁。

  有一天鄧哥想接鄧嫂來(lái)吃雞村玩桑包,鄧哥準(zhǔn)備開(kāi)箱式貨車去接鄧嫂。

  鄧哥要去接鄧嫂纺非,就好比程序A要向程序B發(fā)出一個(gè)請(qǐng)求哑了。從原理上說(shuō),無(wú)論是轎車還是貨車都是車烧颖,都能夠把人接回來(lái)弱左。所以在本質(zhì)上,GET請(qǐng)求和POST請(qǐng)求都能拉取數(shù)據(jù)炕淮。

  這時(shí)候拆火,鄧哥的父親(也就是隔壁老王)出來(lái)了,說(shuō)道:“你是不是傻涂圆,去接人開(kāi)轎車多好啊们镜,開(kāi)貨車干嘛?費(fèi)油不說(shuō)乘综,沒(méi)準(zhǔn)人家那還不讓貨車停車呢憎账!”

  既然GET和POST都可以做到拉取數(shù)據(jù),那么為什么我們通常拉取數(shù)據(jù)使用GET而不使用POST呢卡辰?

  在故事中胞皱,隔壁老王不讓鄧哥開(kāi)卡車去接鄧嫂,那么在現(xiàn)實(shí)中九妈,是不是也有一個(gè)“隔壁老王”這樣的角色在限制我們呢反砌?

  答案是:有的!這個(gè)現(xiàn)實(shí)中的“隔壁老王”就是ISO國(guó)際標(biāo)準(zhǔn)化組織萌朱,這個(gè)組織也說(shuō)了一堆類似隔壁老王的話宴树,這堆話被稱為RFC規(guī)范。

  所以說(shuō)晶疼,我們常說(shuō)的HTTP協(xié)議實(shí)際上是基于RFC規(guī)范的酒贬,實(shí)際上GET和POST請(qǐng)求的語(yǔ)法是完全相同的又憨,但是在RFC規(guī)范中,給GET請(qǐng)求和POST請(qǐng)求規(guī)定了語(yǔ)義锭吨,規(guī)定GET用來(lái)獲取信息蠢莺,POST用來(lái)發(fā)送信息。

  當(dāng)過(guò)年的時(shí)候零如,鄧哥想要給鄧嫂家送一些年貨的時(shí)候躏将,鄧哥按照隔壁老王的囑咐,開(kāi)著貨車給鄧嫂家送年貨去了考蕾。當(dāng)然祸憋,送過(guò)去了一些蔬菜也會(huì)稍微拉回來(lái)一點(diǎn)水果~

  這就是按照RFC的規(guī)范來(lái)執(zhí)行的,當(dāng)鄧哥想要送年貨的時(shí)候肖卧,就會(huì)開(kāi)貨車過(guò)去蚯窥;在互聯(lián)網(wǎng)環(huán)境中,如果想要發(fā)送信息就要使用POST方法喜命。

  POST方法雖然是發(fā)送消息的沟沙,但也是有Response的,在請(qǐng)求返回的時(shí)候帶回來(lái)一點(diǎn)數(shù)據(jù)也是被允許的壁榕。

  那么這時(shí)候問(wèn)題又來(lái)了矛紫,鄧哥如果不聽(tīng)老王的怎么辦?那這個(gè)規(guī)范不就沒(méi)有作用了嗎牌里?這個(gè)時(shí)候老王也是很有辦法的颊咬,老王就坐在院子門口,如果鄧哥想運(yùn)貨出去的時(shí)候牡辽,開(kāi)的不是貨車就不讓出院門~

  光有規(guī)范沒(méi)有具體的軟件實(shí)施也是沒(méi)有意義的喳篇,所以很多的軟件遵從了RFC的規(guī)范,比如我們熟悉的Chrome瀏覽器态辛。所以我們想用GET方式發(fā)送文件或者圖片是不可能的~就像鄧哥不可能用轎車去給鄧嫂送年貨一樣麸澜。

  所以我們最后來(lái)總結(jié)一下:

  當(dāng)人們問(wèn)起GET和POST的區(qū)別時(shí),我們要先確定奏黑,這里的GET和POST是基于什么前提的炊邦?

  1. 如果什么前提都沒(méi)有,也就是不用任何規(guī)范限制的話熟史,我們只考慮語(yǔ)法來(lái)說(shuō)馁害,這兩個(gè)方式是沒(méi)有任何區(qū)別的,只有名字不一樣蹂匹。

  2. 如果是基于RFC規(guī)范的碘菜,那么問(wèn)題就又來(lái)了。是基于RFC理論的,還是基于具體的實(shí)現(xiàn)的忍啸。

 ⊙鎏埂(1)如果是基于RFC理論的,我們稱這個(gè)為Specification吊骤。那么GET和POST是具有相同的語(yǔ)法缎岗,但是不具備相同的語(yǔ)義静尼,GET方式用作獲取信息白粉,POST方式用作發(fā)送信息。

 ∈竺臁(2)如果是基于RFC的具體實(shí)現(xiàn)的鸭巴,我們稱之為implementation。其實(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)單的列舉在下面了~

  a) GET的數(shù)據(jù)在 URL 中對(duì)所有人都是可見(jiàn)的养铸。POST的數(shù)據(jù)不會(huì)顯示在 URL 中。

  b) 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ú)限制鳞滨。

  c) GET可收藏為書簽,POST不可收藏為書簽蟆淀。

  d) GET后退按鈕/刷新無(wú)影響拯啦,POST數(shù)據(jù)會(huì)被重新提交(瀏覽器應(yīng)該告知用戶數(shù)據(jù)會(huì)被重新提交)。

  e) GET編碼類型application/x-www-form-url扳碍,POST編碼類型encodedapplication/x-www-form-urlencoded 或 multipart/form-data提岔。為二進(jìn)制數(shù)據(jù)使用多重編碼。

  f) GET歷史參數(shù)會(huì)保留在瀏覽器歷史中笋敞。POST參數(shù)不會(huì)保存在瀏覽器歷史中碱蒙。

  g) GET只允許 ASCII 字符。POST沒(méi)有限制。也允許二進(jìn)制數(shù)據(jù)赛惩。

  h) 與 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連接贾漏。在這背后也有許多的設(shè)計(jì)和考慮~

  所以在我們不要認(rèn)為GET和POST請(qǐng)求有什么區(qū)別是一個(gè)很簡(jiǎn)單的問(wèn)題哦~很多簡(jiǎn)單的問(wèn)題背后都有著很復(fù)雜的背景。

  其實(shí)這也提醒著我們?cè)趯W(xué)習(xí)和生活中不要失去好奇心藕筋。就像我們?yōu)槭裁词钦驹诘厍蛏隙皇秋h在空中纵散?太陽(yáng)為什么總是東升西落?天空為什么是藍(lán)色的而不是其他顏色隐圾?為什么人類都有眼睛鼻子和嘴伍掀?

  很多我們認(rèn)為是理所當(dāng)然的背后都有著它理所當(dāng)然的道理。也許這個(gè)道理就是另一個(gè)全新世界的大門~暇藏!希望你能夠在這個(gè)浮躁的世界中保持著一顆純潔的好奇心~蜜笤!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市叨咖,隨后出現(xiàn)的幾起案子瘩例,更是在濱河造成了極大的恐慌,老刑警劉巖甸各,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垛贤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡趣倾,警方通過(guò)查閱死者的電腦和手機(jī)聘惦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)儒恋,“玉大人善绎,你說(shuō)我怎么就攤上這事〗刖。” “怎么了禀酱?”我有些...
    開(kāi)封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)牧嫉。 經(jīng)常有香客問(wèn)我剂跟,道長(zhǎng)减途,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任曹洽,我火速辦了婚禮鳍置,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘送淆。我一直安慰自己税产,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布偷崩。 她就那樣靜靜地躺著辟拷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪环凿。 梳的紋絲不亂的頭發(fā)上梧兼,一...
    開(kāi)封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音智听,去河邊找鬼。 笑死渡紫,一個(gè)胖子當(dāng)著我的面吹牛到推,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惕澎,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼莉测,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了唧喉?” 一聲冷哼從身側(cè)響起捣卤,我...
    開(kāi)封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎八孝,沒(méi)想到半個(gè)月后董朝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡干跛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年子姜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楼入。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哥捕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嘉熊,到底是詐尸還是另有隱情遥赚,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布阐肤,位于F島的核電站凫佛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜御蒲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一衣赶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧厚满,春花似錦府瞄、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至丰榴,卻和暖如春货邓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背四濒。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工换况, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盗蟆。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓戈二,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親喳资。 傳聞我的和親對(duì)象是個(gè)殘疾皇子觉吭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 這就是按照RFC的規(guī)范來(lái)執(zhí)行的,當(dāng)鄧哥想要送年貨的時(shí)候仆邓,就會(huì)開(kāi)貨車過(guò)去鲜滩;在互聯(lián)網(wǎng)環(huán)境中,如果想要發(fā)送信息就要使用P...
    橫豎撇捺啊閱讀 248評(píng)論 0 1
  • 參考渡一筆記 這就是按照RFC的規(guī)范來(lái)執(zhí)行的节值,當(dāng)鄧哥想要送年貨的時(shí)候徙硅,就會(huì)開(kāi)貨車過(guò)去;在互聯(lián)網(wǎng)環(huán)境中察署,如果想要發(fā)送...
    橫豎撇捺啊閱讀 268評(píng)論 0 1
  • HTTP是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫 傳輸協(xié)議就是計(jì)算機(jī)與計(jì)...
    Ending_cy閱讀 928評(píng)論 0 0
  • 作者:楊光鏈接:https://www.zhihu.com/question/28586791/answer/14...
    studystudy閱讀 425評(píng)論 0 2
  • 【D045】晨間思 外部條件越是不允許闷游,自己越是做到了。小小不喜歡我早起贴汪,不喜歡我讀書脐往,不想要我成長(zhǎng)。如果我就按她...
    百齡語(yǔ)閱讀 82評(píng)論 0 0