發現很多前端小夥伴的簡歷當中都寫有這麼一句:瞭解http協議。其實大可不必,因爲http是前端基礎中的基礎。這就相當於一位廚師的簡歷中寫着:熟練使用炊具。
既然簡歷中出現這個知識點,那麼緊隨而來的便是面試官的提問:get與post方法有什麼區別呢?
大部分面試者都只會從單詞字面上回答:get是從服務器獲取數據,而post是向服務器傳送數據。
很顯然上面的回答是無法讓面試官信服的,下面是我對這兩種請求方法的一些總結:
首先get和post都是http請求的方法。而http又是基於TCP/IP的應用層通信協議。所以本質上來說get和post請求是沒有區別的,都是TCP鏈接。他們能做的事情也都是一樣的(與服務器進行交互)。換言之:get能做的事,post也可以做,反之亦可!
http協議提供這兩種方法,也是在特定的情況下區分應用:
1、參數位置:get請求的參數是放在url(query)裏面的。而POST請求的參數是放置在請求體(content)裏面的。當然post請求也是可以放置在url當中的。
2、瀏覽器緩存:get請求可以被瀏覽器緩存,而post請求不能被緩存。
3、參數長度:get請求參數由於是在url裏面,所以會受到瀏覽器的長度限制,瀏覽器的不同長度的數值也不同,比如IE是2083字節。理論上講,POST是沒有大小限制的。因爲HTTP協議規範沒有進行大小限制。
4、參數安全性:同樣是因爲get的請求參數放置在url裏,所以可見,再加上會被瀏覽器緩存,所以安全性比較差。post請求的參數是放置在請求體裏,且不會被緩存,所以安全性相對就好一些。
5、瀏覽器訪問:get請求可以通過瀏覽器直接訪問,支持刷新和後退。post請求是不能被瀏覽器直接訪問的,刷新後數據會重新傳送。
6、RESTful架構:在該架構中get扮演獲取數據的角色,而post扮演的是添加數據的角色。所以get對數據是無害的,不會對數據資源造成影響。而post使用不當,有可能對原有數據資源造成傷害。