WEB 開發同學一看 get 和 post 請求方法的區別,第一感覺都是 So easy!
學習ajax、fetch、axios時,傳送網路請求攜帶引數時,都需要分別處理get和post的引數。所以我們需要學習get和post的區別,以便更好地進行前後端資料互動。get 和 post 區別你到底知道多少呢?
一、GET 和 POST的區別
|
GET |
POST |
後退按鈕/重新整理 |
無害 |
資料會被重新提交(瀏覽器應該告知使用者資料會被重新提交)。 |
書籤 |
可收藏為書籤 |
不可收藏為書籤 |
快取 |
能被快取 |
不能快取 |
編碼型別 |
application/x-www-form-urlencoded |
|
歷史 |
引數保留在瀏覽器歷史中。 |
引數不會儲存在瀏覽器歷史中。 |
對資料長度的限制 |
是的。當傳送資料時,GET 方法向 URL 新增資料;URL 的長度是受限制的(URL 的最大長度是 2048 個字元)。 |
無限制。 |
對資料型別的限制 |
只允許 ASCII 字元。 |
沒有限制。也允許二進位制資料。 |
安全性 |
與 POST 相比,GET 的安全性較差,因為所傳送的資料是 URL 的一部分。在傳送密碼或其他敏感資訊時絕不要使用 GET ! |
POST 比 GET 更安全,因為引數不會被儲存在瀏覽器歷史或 web 伺服器日誌中。 |
可見性 |
資料在 URL 中對所有人都是可見的。 |
資料不會顯示在 URL 中。 |
二、本質區別
2.1http協議
瀏覽器和伺服器之間是通過http協議進行資料通訊的,而get和post是http協議其中的兩個方法。想要更多瞭解http協議,請點選《網路請求詳解》。
http協議底層是 TCP/IP ,把TCP比作汽車,用TCP給瀏覽器和伺服器之間運輸資料,它很可靠,從不會發生資料丟失現象,但是如果路上跑的全是一模一樣的TCP車輛,那這個世界就非常混亂,整個系統就會癱瘓。為了避免這種情況發生,http 定義了交通規則,給汽車運輸設定了好幾個服務類別,有 GET、 POST、 PUT、 DELETE 等等。它們的作用分別為:
- GET:從伺服器上獲取資料,僅僅查詢伺服器上的資料,不進行修改。
- POST:向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案)。資料被包含在請求體中。POST 請求可能會導致新的資源的建立和/或已有資源的修改。
- PUT:從客戶端向伺服器傳送的資料,也就是新增資料。
- DELETE:字面意思刪除,客戶端請求伺服器刪除指定的內容。
當執行GET請求時,汽車貼上get標籤,而且要求把貨物放到車頂(url)方便記錄,當執行POST請求時,貼上post標籤,將貨物放置車廂內(body)。
2.2、為什麼說 get 比 post 更快?
get 產生一個TCP資料包,而 post 產生兩個資料包。
get 傳送資料的時候,url把header和data資料帶著一起傳送到伺服器,然後返回結果。但是 post 會先傳送 header 到伺服器,伺服器響應 100 之後,繼續向瀏覽器傳送data,伺服器接收完之後,會驗證資料完整性,然後返回結果。
post 要比 get 多進行一次資料傳輸,所以 get 比post更快。好多人想著,為了提升網站速度,把所有post改成get方式,這樣合適嗎?
- 網速快的時候,發一次資料和發兩次資料時間差一點點,基本可以忽略,但是網速慢的時候,post 可以驗證資料完整性,有非常大的優點。
- get 和 post都有自己的語義,不能隨便混用。
- 並不是所有瀏覽器 post 都會傳送兩次資料,火狐瀏覽器只發一次。
三、面試怎麼回答?
- post更安全。
- post可以傳送更大資料。
- post能傳送更多資料型別。
- post比get慢。
- post用於修改和寫入資料,get一般用於分享搜尋篩選之類操作。