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面試真題解析
面試合集:https://gitee.com/mydb/interview
關注下面二維碼,訂閱更多精彩内容。
關注公衆号(加好友):
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAjMx8CXo9CXwITMvw1dvwFMvwlM3VWaWV2Zh1Wa-cmbw5iMvFGan52bop3Zu92Zvwlbj5ybnlGch5ibkNWavw1LcpDc0RHaiojIsJye.png)
作者:
王磊的部落格
出處:
http://vipstone.cnblogs.com/