不知道從什么時候開始踏烙,針對HTTP協(xié)議中的GET和POST方法的區(qū)別,成了各公司面試中經(jīng)常被提及的問題历等;
而所謂的答案讨惩,也真是讓人啼笑皆非;認真思慮寒屯,痛心疾首荐捻,小弟雖不才,愿撰一文以辯之寡夹,望各路大神不吝賜教处面,在下頓首,若有誤處菩掏,還請指教一二魂角,小弟不勝感激!V浅瘛野揪!
首先我們要搞清楚一些概念,HTTP僅僅是網(wǎng)絡世界中端對端 (客戶端與服務器端) 相互之間通信的協(xié)議瞧栗,客戶端發(fā)送請求斯稳,服務器端接受請求并做出對本次請求處理后的相應,就像生活中的協(xié)議一樣迹恐,雙方約定俗成互相遵守平挑,協(xié)議中規(guī)定了相互之間需要遵守的各種細節(jié),HTTP協(xié)議也一樣,它規(guī)定了在互聯(lián)網(wǎng)世界中信息傳遞的各種細節(jié)通熄,比如:信息的大小唆涝,信息使用的數(shù)據(jù)類型,信息中需要的其他附加信息唇辨,本次應答的是誰廊酣,怎么標注應答者信息等等……
HTTP是一個基于TCP而來的相當復雜的通信協(xié)議,而在眾多規(guī)則細節(jié)中赏枚,有一項規(guī)定就是發(fā)送請求時使用哪種方式亡驰,就類似說,我要去你家饿幅,我是做騎自行車還是開小轎車去凡辱,可以根據(jù)去你家的目的不同而選擇不同的工具,這就是我們所說的傳輸方式栗恩,在HTTP中也稱為請求方法透乾,方法有很多種,如下圖磕秤,Postman中列出了可選的請求方法
下圖是一些常用的請求方法及含義說明: (圖節(jié)選自 <圖解HTTP> 一書)
每個請求方法都各自有不同的含義:
就比如 GET 請求乳乌,意思就是:我(客戶端)這次來 是跟你(服務端)要東西(數(shù)據(jù))的;
而POST請求市咆,意思就是:我(客戶端)這次來是給你(服務端)送東西(數(shù)據(jù))的汉操;
除此之外就沒有其他區(qū)別了;
這件事本來就這么簡單蒙兰,但是……
另起一個話題磷瘤;
我相信現(xiàn)在的網(wǎng)民都知道瀏覽器是什么東西,同樣你也應該知道搜变,那么瀏覽器就是目前使用最廣泛的HTTP客戶端工具采缚;
我們平時就是使用瀏覽器發(fā)送一個請求到服務器,服務器接到請求并處理痹雅,然后給我們響應返回數(shù)據(jù)仰担,瀏覽器拿到服務器返回的數(shù)據(jù)后解析,我們就看到了一個網(wǎng)站中精彩紛呈的頁面绩社,這在這個請求與響應的過程中摔蓝,瀏覽器與服務器之間通信的協(xié)議就是使用了HTTP協(xié)議;
再告訴你一個秘密愉耙,在網(wǎng)絡世界中贮尉,瀏覽器絕對不是唯一的 HTTP 客戶端工具,上面圖片中提到的 Postman 也是HTTP客戶端工具的一種朴沿,其實還有更多猜谚,只不過败砂,瀏覽器的使用最為廣泛而已;
于是魏铅,很多開發(fā)者竟然將瀏覽器對HTTP協(xié)議的實現(xiàn)昌犹,當做了HTTP協(xié)議本身;
所以览芳,才出現(xiàn)了上面的問題及啼笑皆非的答案斜姥;
我整理了一下,答案基本就是這么幾條:
1:get在地址欄傳輸數(shù)據(jù)沧竟,post在表單傳輸數(shù)據(jù)铸敏;
2:get傳輸數(shù)據(jù)量小,post傳輸數(shù)據(jù)量大悟泵;
3:get傳輸數(shù)據(jù)可見杈笔,因此不安全;post傳輸數(shù)據(jù)不可見糕非,因此安全蒙具;
第一條,這是瀏覽器的做法峰弹,不能代表協(xié)議店量;再者說芜果,JS中就可以使用Ajax來發(fā)送GET及POST等各種請求鞠呈,難道JS代碼中也有地址欄嗎?難道不用HTML表單就無法發(fā)送POST請求嗎右钾?
第二條蚁吝,GET傳輸數(shù)據(jù)量小是瀏覽器在實現(xiàn)HTTP協(xié)議時做的限制,協(xié)議中并沒有對方法傳輸數(shù)據(jù)大小做規(guī)定舀射,理論上來說傳輸?shù)臄?shù)據(jù)量都是無限大小的窘茁,但是工具的實現(xiàn)需要契合語義,所以大部分工具脆烟,都對get請求做了限制山林;
舉個栗子:
情況1: 我?guī)Я艘欢蚜闶橙ツ慵遥缓笪腋阏f邢羔,我來你家的目的是想把這些零食送給你驼抹,然后我放下所有的零食空手離開了你家;
情況2 :我?guī)Я艘欢蚜闶橙ツ慵野莺祝缓笪腋阏f框冀,我來你家的目的是想帶走東西,然后我放下所有的零食空手離開了你家敏簿;
以上兩種情況明也,第一種是正常人的表現(xiàn)宣虾,而第二種完全就是個神經(jīng)病患者,明明就是來送東西的温数,卻表達了要帶走東西的目的绣硝,這就是使用GET發(fā)送大量數(shù)據(jù)到服務器端的情況,瀏覽器不想當一個神經(jīng)病撑刺,所以對GET做了限制域那;
第三條,HTTP協(xié)議中猜煮,對所有數(shù)據(jù)的請求及相應次员,都是明文傳輸?shù)模瑳]有任何加密方式王带,也就是說安全與不安全不是用哪種方法能夠改變的淑蔚,HTTP協(xié)議本身就是不安全,在HTTP協(xié)議基礎上加入加密解密的功能才是安全問題的解決辦法愕撰,這就是HTTPS出現(xiàn)的原因刹衫;
針對GET和POST的誤解,瀏覽器基本就是躺槍搞挣,要怪就怪那些所謂的開發(fā)大牛們吧
以上带迟;
文章首發(fā):https://note.youdao.com/share/?id=f56ff8335c86122ec1e6eaa4208d033a&type=notebook#/AAB0DBB56DD54DFDB2BE2189E5FB3E0B
關于作者:https://note.youdao.com/share/?id=f56ff8335c86122ec1e6eaa4208d033a&type=notebook#/A4C7FB8100E1406FA298E9278059D56B
知乎專欄 :https://zhuanlan.zhihu.com/xilinglaoshi
歡迎關注? 西嶺老濕? 微信公眾號