作者 | 磊哥
來源 | Java面試真題解析(ID:aimianshi666)
(資料圖片)
轉載請聯系授權(微信ID:GG_Stone)
GET 和 POST 是 HTTP 請求中最常用的兩種請求方法,在日常開發的 RESTful 接口中,都能看到它們的身影。而它們之間的區別,也是一道常見且經典的面試題,所以我們本文就來詳細的聊聊。HTTP 協議定義的方法類型總共有以下 10 種:
PS:目前大部分的網站使用的都是 HTTP 1.1 的協議。
但在日常開發中,使用頻率最高的就屬 GET 請求和 POST 請求了,尤其是在中、小型公司,基本只會使用這兩種請求來實現一個項目。
一、相同點和最本質的區別1、相同點GET 請求和 POST 請求底層都是基于 TCP/IP 協議實現的,使用二者中的任意一個,都可以實現客戶端和服務器端的雙向交互。
2、最本質的區別GET 和 POST 最本質的區別是“約定和規范”上的區別,在規范中,定義 GET 請求是用來獲取資源的,也就是進行查詢操作的,而 POST 請求是用來傳輸實體對象的,因此會使用 POST 來進行添加、修改和刪除等操作。當然如果嚴格按照規范來說,刪除操作應該使用 DELETE 請求才對,但在實際開發中,使用 POST 來進行刪除的用法更常見一些。按照約定來說,GET 和 POST 的參數傳遞也是不同的,GET 請求是將參數拼加到 URL 上進行參數傳遞的,而 POST 是將請參數寫入到請求正文中傳遞的,如下圖所示:
二、本質區別1、緩存不同GET 請求一般會被緩存,比如常見的 CSS、JS、HTML 請求等都會被緩存;而 POST 請求默認是不進行緩存的。
2、參數長度限制不同GET 請求的參數是通過 URL 傳遞的,而 URL 的長度是有限制的,通常為 2k,當然瀏覽器廠商不同、版本不同這個限制的大小值可能也不同,但相同的是它們都會對 URL 的大小進行限制;而 POST 請求參數是存放在請求正文(request body)中的,所以沒有大小限制。
3、回退和刷新不同GET 請求可以直接進行回退和刷新,不會對用戶和程序產生任何影響;而 POST 請求如果直接回滾和刷新將會把數據再次提交,如下圖所示:
4、歷史記錄不同GET 請求的參數會保存在歷史記錄中,而 POST 請求的參數不會保留到歷史記錄中。
5、書簽不同GET 請求的地址可被收藏為書簽,而 POST 請求的地址不能被收藏為書簽。
總結GET 和 POST 是 HTTP 請求中最常用的兩種請求方法,它們的底層都是基于 TCP/IP 實現的。它們的區別主要體現在 5 個方面:緩存不同、參數長度限制不同、回退和刷新不同、歷史記錄不同、能否保存為書簽不同,但它們最大的區別是規范和約定上的不同,規范中定義 GET 是用來獲取信息的,而 POST 是用來傳遞實體的,并且 GET 請求的參數要放在 URL 上,而 POST 請求的參數要放在請求正文中。