前后端數據交互(八)——請求方法 GET 和 POST 區別


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一般用於分享搜索篩選之類操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM