1. 程式人生 > >GET和POST的區別及誤區

GET和POST的區別及誤區

兩種常用 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(返回資料)。

誤區
  1. HTTP 協議未規定GET 和POST的長度限制
  2. URL不存在引數上限的問題
  3. GET的最大長度顯示是因為 瀏覽器和 web伺服器限制了 URI的長度GET的最大長度顯示是因為瀏覽器和web伺服器限制了 URI的長度
  4. 不同的瀏覽器和WEB伺服器,限制的最大長度不一樣不同的瀏覽器和WEB伺服器,限制的最大長度不一樣
  5. 要支援IE,則最大長度為2083byte(2K+35),若只支援Chrome,則最大長度 8182byte要支援IE,則最大長度為2083byte,若只支援Chrome,則最大長度 8182byte
  6. 對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於作業系統的支援。

誤解:HTTP 協議下的 Get 請求引數長度是有大小限制的,最大不能超過XX,而 Post 是無限制的。

1、首先即使有長度限制,也是限制的是整個 URI 長度,而不僅僅是你的引數值資料長度。

2、HTTP 協議從未規定 GET/POST 的請求長度限制是多少。