前後端資料互動(八)——請求方法 GET 和 POST 區別

前端人發表於2021-09-14

WEB 開發同學一看 get 和 post 請求方法的區別,第一感覺都是 So easy!

前後端資料互動(八)——請求方法 GET 和 POST 區別

 

學習ajax、fetch、axios時,傳送網路請求攜帶引數時,都需要分別處理get和post的引數。所以我們需要學習get和post的區別,以便更好地進行前後端資料互動。get 和 post 區別你到底知道多少呢?

一、GET 和 POST的區別

 

GET

POST

後退按鈕/重新整理

無害

資料會被重新提交(瀏覽器應該告知使用者資料會被重新提交)。

書籤

可收藏為書籤

不可收藏為書籤

快取

能被快取

不能快取

編碼型別

application/x-www-form-urlencoded


application/x-www-form-urlencoded 或 multipart/form-data。為二進位制資料使用多重編碼。

歷史

引數保留在瀏覽器歷史中。

引數不會儲存在瀏覽器歷史中。

對資料長度的限制

是的。當傳送資料時,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 都會傳送兩次資料,火狐瀏覽器只發一次。

三、面試怎麼回答?

  1. post更安全。
  2. post可以傳送更大資料。
  3. post能傳送更多資料型別。
  4. post比get慢。
  5. post用於修改和寫入資料,get一般用於分享搜尋篩選之類操作。

相關文章