面試突擊71:GET 和 POST 有什麼區別?
攜手創作,共同成長!這是我參與「掘金日新計劃 · 8 月更文挑戰」的第4天,點選檢視活動詳情
GET 和 POST 是 HTTP 請求中最常用的兩種請求方法,在日常開發的 RESTful 介面中,都能看到它們的身影。而它們之間的區別,也是一道常見且經典的面試題,所以我們本文就來詳細的聊聊。 HTTP 協議定義的方法型別總共有以下 10 種:
PS:目前大部分的網站使用的都是 HTTP 1.1 的協議。
但在日常開發中,使用頻率最高的就屬 GET 請求和 POST 請求了,尤其是在中、小型公司,基本只會使用這兩種請求來實現一個專案。
1.相同點和最本質的區別
1.1 相同點
GET 請求和 POST 請求底層都是基於 TCP/IP 協議實現的,使用二者中的任意一個,都可以實現客戶端和伺服器端的雙向互動。
1.2 最本質的區別
GET 和 POST 最本質的區別是“約定和規範”上的區別,在規範中,定義 GET 請求是用來獲取資源的,也就是進行查詢操作的,而 POST 請求是用來傳輸實體物件的,因此會使用 POST 來進行新增、修改和刪除等操作。 當然如果嚴格按照規範來說,刪除操作應該使用 DELETE 請求才對,但在實際開發中,使用 POST 來進行刪除的用法更常見一些。 按照約定來說,GET 和 POST 的引數傳遞也是不同的,GET 請求是將引數拼加到 URL 上進行引數傳遞的,而 POST 是將請引數寫入到請求正文中傳遞的,如下圖所示:
2.非本質區別
2.1 快取不同
GET 請求一般會被快取,比如常見的 CSS、JS、HTML 請求等都會被快取;而 POST 請求預設是不進行快取的。
2.2 引數長度限制不同
GET 請求的引數是通過 URL 傳遞的,而 URL 的長度是有限制的,通常為 2k,當然瀏覽器廠商不同、版本不同這個限制的大小值可能也不同,但相同的是它們都會對 URL 的大小進行限制;而 POST 請求引數是存放在請求正文(request body)中的,所以沒有大小限制。
2.3 回退和重新整理不同
GET 請求可以直接進行回退和重新整理,不會對使用者和程式產生任何影響;而 POST 請求如果直接回滾和重新整理將會把資料再次提交,如下圖所示:
2.4 歷史記錄不同
GET 請求的引數會儲存在歷史記錄中,而 POST 請求的引數不會保留到歷史記錄中。
2.5 書籤不同
GET 請求的地址可被收藏為書籤,而 POST 請求的地址不能被收藏為書籤。
總結
GET 和 POST 是 HTTP 請求中最常用的兩種請求方法,它們的底層都是基於 TCP/IP 實現的。它們的區別主要體現在 5 個方面:快取不同、引數長度限制不同、回退和重新整理不同、歷史記錄不同、能否儲存為書籤不同,但它們最大的區別是規範和約定上的不同,規範中定義 GET 是用來獲取資訊的,而 POST 是用來傳遞實體的,並且 GET 請求的引數要放在 URL 上,而 POST 請求的引數要放在請求正文中。
參考 & 鳴謝
www.w3school.com.cn/tags/html_ref_httpmethods.asp
是非審之於己,譭譽聽之於人,得失安之於數。
公眾號:Java面試真題解析
- 面試官:什麼是雙親委派模型?
- 面試官:熔斷和降級有什麼區別?
- 寬表為什麼橫行?
- 有沒有完全自主的國產化資料庫技術
- 面試突擊64:瞭解 HTTP 協議嗎?
- 面試突擊80:說一下 Spring 中 Bean 的生命週期?
- 面試突擊89:事務隔離級別和傳播機制有什麼區別?
- 面試突擊82:SpringBoot 中如何操作事務?
- 面試突擊87:說一下 Spring 事務傳播機制?
- 面試突擊81:什麼是跨域問題?如何解決?
- 面試突擊71:GET 和 POST 有什麼區別?
- 面試突擊70:什麼是粘包和半包?怎麼解決?
- 面試突擊68:為什麼 TCP 需要 3 次握手?
- 面試突擊66:請求轉發和請求重定向有什麼區別?
- 面試突擊63:MySQL 中如何去重?
- 面試突擊65:為什麼要用HTTPS?它有什麼優點?
- 面試突擊62:group by 有哪些注意事項?
- 面試突擊53:常見的 HTTP 狀態碼有哪些?
- 面試突擊61:說一下MySQL事務隔離級別?
- 面試突擊52:什麼是三正規化?它有什麼用?