都2020年了,還理不清GET請求和POST請求區別?

前言

這個問題看上去特別初級,但實際上卻涉及到方方面面,也是面試官特別喜歡考的緣由之一。既然如此,那就讓咱們來一塊兒完全理清楚他們的區別。php

首先,咱們先科普一些知識點。web

什麼是 HTTP

HTTP 超文本傳輸協議,是一個簡單的請求-響應協議,它一般運行在 TCP 之上。它指定了客戶端可能發送給服務器什麼樣的消息以及獲得什麼樣的響應。面試

HTTP請求方法

序號 方法 描述
01 HEAD 請求指定的頁面信息,並返回實體主體。
02 GET 相似於 GET 請求,只不過返回的響應中沒有具體的內容,用於獲取報頭。
03 POST 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST 請求可能會致使新的資源的創建或已有資源的修改。
04 PUT 從客戶端向服務器傳送的數據取代指定的文檔的內容。
05 DELETE 請求服務器刪除指定的頁面。
06 CONNECT HTTP/1.1 協議中預留給可以將鏈接改成管道方式的代理服務器。
07 OPTIONS 容許客戶端查看服務器的性能。
08 TRACE 回顯服務器收到的請求,主要用於測試或診斷。
09 PATCH 是對 PUT 方法的補充,用來對已知資源進行局部更新。

知識已經科普的差很少了,接下來,讓咱們一塊兒分析 GET 請求把。瀏覽器

GET 請求

  1. 它是 HTTP 常見的請求類型,最多見於向服務器查詢某些信息。
  2. 能夠將查詢參數追加到 URL末尾,以便將信息發送給服務器。
  3. 對查詢字符串的格式有要求,每一個參數名稱和值必須使用encodeURIComponent進行編碼,才能放到URL末尾,必須用&符號隔開。例如:baidu.com/index.php?name=111&id=222
  4. GET請求產生一個數據包。對於GET方式的請求,瀏覽器會把http header和data一併發送出去,服務器響應200(返回數據)

POST請求

  1. 它是 HTTP 常見的請求類型,最多見於向服務器發送應該被保存的信息或者查詢某些信息。
  2. 能夠添加請求參數,將請求參數添加到body中。
  3. POST請求產生2個數據包,在火狐瀏覽器中,產生一個數據包。

GET請求和POST請求的差異

  1. GET 請求的請求參數是添加到 head 中,能夠在 url 中能夠看到;POST 請求的請求參數是添加到BODY中,在url 中不可見。
  2. GET 請求參數須要使用 encodeURIComponent 進行編碼,必須用 & 符號隔開。
  3. 請求的url有長度限制,這個限制由瀏覽器和 web 服務器決定和設置的。例如IE瀏覽器對 URL的最大限制爲2083個字符,若是超過這個數字,提交按鈕沒有任何反應。由於GET請求的參數是添加到URL中,因此GET請求的URL的長度限制須要將請求參數長度也考慮進去。而POST請求不用考慮請求參數的長度。
  4. GET請求產生一個數據包; POST請求產生2個數據包,在火狐瀏覽器中,產生一個數據包。這個區別點在於瀏覽器的請求機制,先發送請求頭,再發送請求體。由於GET沒有請求體,因此就發送一個數據包,而POST包含請求體,因此發送兩次數據包,可是因爲火狐機制不一樣,因此發送一個數據包。
  5. 因爲GET請求的參數是在url中,因此能夠直接在瀏覽器中打開

GET請求和POST請求的使用場景

若是想要查詢的更快,可使用GET請求。 其餘的,並沒有差異。服務器

留言解惑

因爲有些小夥伴給我留言,說部份內容存在差別,這邊統一說明下。
併發

  • 問題1:GET 請求能夠支持 BODY 傳遞請求參數的。博主卻沒有說起。

解答:
1.GET 請求,默認是不支持BODY傳遞請求參數的。
2.你能夠經過其餘方式讓其支持BODY傳遞請求參數, 可是官方並不建議這樣作。
3.畢竟這不是一個規範,也會存在未知的兼容性問題。因此我並未強調這一點,畢竟存在兼容性問題,並且還須要大量力氣去開發,若是隻是爲BODY傳遞請求參數,爲何不直接用POST請求呢,POST請求它不香嗎?性能

  • 問題2:GET請求、POST請求還涉及是否能夠被收藏書籤耶~博主沒有說起。

解答:
1.GET請求和POST請求均可以被設置爲書籤的,當存在請求參數時,POST請求沒法在書籤中體現請求參數後的結果。由於POST的請求參數在BODY中。
2.在實際項目開發中,大部分接口都是須要驗證身份信息的。這個時候添加書籤的意義就不是很大。由於信息都會獲取不到。
3.博主認爲這並非一個很大的區別點,理由如上,因此並未涉及。測試

相關文章
相關標籤/搜索