【前端 · 面試 】HTTP 總結(五)—— GET 和 POST

這是我參與8月更文挑戰的第5天,活動詳情查看:8月更文挑戰html

最近我在作前端面試題總結系列,感興趣的朋友能夠添加關注,歡迎指正、交流。前端

爭取每一個知識點可以多總結一些,至少要作到在面試時,針對每一個知識點均可以侃起來,不至於啞火。git

前言

在先後端交互的過程當中,使用頻率最高的莫過於 GET 和 POST 這兩個方法,而且這也是面試中被問到頻率很高的知識點。web

面試經常會問:GET 和 POST 方法的區別是什麼?面試

這個問題經常會致使咱們只關心了它們兩個之間的一些差別,而忽略了它們之間的共性,因此對於問題的回答就略顯淺顯。編程

今天咱們就來深扒一下兩個方法到底有何異同。後端

相同點

若是我要說, GET 和 POST 的本質是相同的,不知道有多少人會有異議?瀏覽器

GET 和 POST 方法只是 HTTP 協議爲了避免同分工而規定的兩種請求方式。緩存

HTTP 是什麼?HTTP 是基於 TCP/IP 的關於數據如何在萬維網中如何通訊的協議。安全

HTTP 的底層是 TCP/IP。因此 GET 和 POST 的底層也是 TCP/IP,也就是說,GET 和 POST 都是 TCP 連接。因此說,它們的本質是相同的。

GET 和 POST 之因此產生,要經過HTTP的規則和瀏覽器/服務器的限制進行區分,使它們在應用過程當中體現出不一樣。

整個請求過程大概是這樣的:

  • 客戶端 IP 發出請求。
  • 發出的請求數據包會經過 TCP ,經網絡傳輸給遠程服務端 IP。
  • 服務端 IP 收到請求包以後,解析並處理請求包最後服務端會經過 TCP 將處理結果返回給客戶端。
  • 用戶即可以查看到想要的響應數據。

區別

雖說 GET 和 POST 請求的本質是相同的 —— 都是 TCP 鏈接,可是,在平時的使用中仍是存在必定區別的。

咱們這裏所說的區別其實都是約定俗成的一些東西,有些區別的界限可能不是很明確。

做用不一樣

既然是爲了避免同分工而產生的兩種方法,那麼它們做用確定是不一樣的:

  • GET 多用於從服務端獲取資源
  • POST 通常用來向服務端提交資源

其實這是一句廢話,之因此列出來,是爲了內容更全面一些。

參數傳遞方式不一樣

這一點應該是咱們可以最直觀地觀察到的。

  • GET 的參數通常是經過 ? 跟在 URL 後面的,多個參數經過 & 鏈接,好比:www.example.com?serach=bianchengsanmei&content=123
  • POST 的參數通常是包含在 request body 中的image-20210805202707330

其實,這個區別不是絕對的,GET 也能夠經過 params 攜帶參數,而 POST 的URL 後面也能夠攜帶參數,只是咱們一般不建議這麼作而已。

安全性不一樣

由於參數傳遞方式的不一樣,因此 GET 和 POST 的安全性不一樣:GET 比 POST 更不安全,由於參數直接暴露在URL上,因此 GET 不能用來傳遞敏感信息。

從傳輸的角度來講,他們都是不安全的,由於 HTTP 在網絡上是明文傳輸的,只要在網絡節點上捉包,就能完整地獲取數據報文,要想安全傳輸,就只有加密,也就是 HTTPS。

參數長度限制不一樣

GET 和 POST 傳遞參數的長度不一樣:

  • get傳送的數據量較小,不能大於2KB。
  • post傳送的數據量較大,通常被默認爲不受限制。

在這裏咱們要明確一點:HTTP 協議沒有 Body 和 URL 的長度限制,對 URL 限制的大可能是瀏覽器和服務器的緣由。

服務器是由於處理長 URL 要消耗比較多的資源,爲了性能和安全(防止惡意構造長 URL 來攻擊)考慮,會給 URL 長度加限制。

參數數據類型不一樣

參數的數據類型,GET 只接受 ASCII 字符,而 POST 沒有限制。

編碼方式不一樣

GET 請求只能進行 URL 編碼(application/x-www-form-urlencoded)

POST 支持多種編碼方式(application/x-www-form-urlencoded 或 multipart/form-data。爲二進制數據使用多種編碼。)

緩存機制不一樣

這個須要從如下幾點來講明:

  • GET 請求會被瀏覽器主動cache,而 POST 不會,除非手動設置。
  • GET 請求參數會被完整保留在瀏覽器歷史記錄裏,而 POST 中的參數不會被保留。
  • GET 產生的 URL 地址能夠被 Bookmark,而 POST 不能夠。
  • GET 在瀏覽器回退時是無害的,而 POST 會再次提交請求。

時間消耗不一樣

GET 和 POST 請求時間的不一樣主要是由於:

  • GET 產生一個 TCP 數據包;
  • POST 產生兩個 TCP 數據包。

對於 GET 方式的請求,瀏覽器會把 header 和 data 一併發送出去,服務器響應 200(返回數據);而對於 POST,瀏覽器先發送 Header,服務器響應 100 continue,瀏覽器再發送 data,服務器響應 200 ok(返回數據),詳細分析一下:

POST 請求的過程:

  1. 瀏覽器請求 TCP 鏈接(第一次握手)

  2. 服務器答應進行 TCP 鏈接(第二次握手)

  3. 瀏覽器確認,併發送 POST 請求頭(第三次握手,這個報文比較小,因此 HTTP 會在此時進行第一次數據發送)

  4. 服務器返回100 Continue響應

  5. 瀏覽器發送數據

  6. 服務器返回 200 OK響應

GET 請求的過程:

  1. 瀏覽器請求 TCP 鏈接(第一次握手)
  2. 服務器答應進行 TCP 鏈接(第二次握手)
  3. 瀏覽器確認,併發送 GET 請求頭和數據(第三次握手,這個報文比較小,因此 HTTP 會在此時進行第一次數據發送)
  4. 服務器返回 200 OK響應

在網絡環境好的狀況下,發一次包的時間和發兩次包的時間差異基本能夠無視。而在網絡環境差的狀況下,兩次包的TCP在驗證數據包完整性上,有很是大的優勢。

總結

GET 和 POST 的異同點就總結了這麼多,因爲時間倉促,疏漏之處在所不免,歡迎指正,本文會持續改進!

~

~本文完,感謝閱讀!

~

學習有趣的知識,結識有趣的朋友,塑造有趣的靈魂!

你們好,我是〖編程三昧〗的做者 隱逸王,個人公衆號是『編程三昧』,歡迎關注,但願你們多多指教!

你來,懷揣指望,我有墨香相迎! 你歸,不管得失,惟以餘韻相贈!

知識與技能並重,內力和外功兼修,理論和實踐兩手都要抓、兩手都要硬!

參考資料:

[1] GET和POST兩種基本請求方法的區別

[2] 面試必備:GET和POST的區別詳細解說

[3] POST與GET的區別

相關文章
相關標籤/搜索