GET和POST的區別及誤區
阿新 • • 發佈:2018-12-15
兩種常用 HTTP 請求方法:GET 和 POST
HTTP協議的描述
GET - 從指定的資源請求資料。
POST - 向指定的資源提交要被處理的資料
GET方法
- 查詢字串(名稱/值對)是在 GET 請求的 URL 中傳送的
- GET 請求可被快取
- GET 請求保留在瀏覽器歷史記錄中
- GET 請求可被收藏為書籤
- GET 請求不應在處理敏感資料時使用
- GET 請求有長度限制
- GET 請求只應當用於取回資料
POST方法
- 查詢字串(名稱/值對)是在 POST 請求的 HTTP 訊息主體中傳送的
- POST 請求不會被快取
- POST 請求不會保留在瀏覽器歷史記錄中
- POST 不能被收藏為書籤
- POST 請求對資料長度沒有要求
比較GET和POST
get引數通過url傳遞,post放在request body中。 get請求在url中傳遞的引數是有長度限制的,而post沒有。 get比post更不安全,因為引數直接暴露在url中,所以不能用來傳遞敏感資訊。 get請求只能進行url編碼,而post支援多種編碼方式 get請求會瀏覽器主動cache,而post支援多種編碼方式。 get請求引數會被完整保留在瀏覽歷史記錄裡,而post中的引數不會被保留。 GET和POST本質上就是TCP連結,並無差別。但是由於HTTP的規定和瀏覽器/伺服器的限制,導致他們在應用過程中體現出一些不同。 GET產生一個TCP資料包;POST產生兩個TCP資料包。
長的說:
對於GET方式的請求,瀏覽器會把http header和data一併傳送出去,伺服器響應200(返回資料);
而對於POST,瀏覽器先發送header,伺服器響應100 continue,瀏覽器再發送data,伺服器響應200 ok(返回資料)。
誤區- HTTP 協議未規定GET 和POST的長度限制
- URL不存在引數上限的問題
- GET的最大長度顯示是因為 瀏覽器和 web伺服器限制了 URI的長度GET的最大長度顯示是因為瀏覽器和web伺服器限制了 URI的長度
- 不同的瀏覽器和WEB伺服器,限制的最大長度不一樣不同的瀏覽器和WEB伺服器,限制的最大長度不一樣
- 要支援IE,則最大長度為2083byte(2K+35),若只支援Chrome,則最大長度 8182byte要支援IE,則最大長度為2083byte,若只支援Chrome,則最大長度 8182byte
- 對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於作業系統的支援。
誤解:HTTP 協議下的 Get 請求引數長度是有大小限制的,最大不能超過XX,而 Post 是無限制的。
1、首先即使有長度限制,也是限制的是整個 URI 長度,而不僅僅是你的引數值資料長度。
2、HTTP 協議從未規定 GET/POST 的請求長度限制是多少。