天天看點

面試突擊71:GET 和 POST 有什麼差別?

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

關注下面二維碼,訂閱更多精彩内容。

關注公衆号(加好友):

面試突擊71:GET 和 POST 有什麼差別?

作者:

王磊的部落格

出處:

http://vipstone.cnblogs.com/