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