HTTP協議GET和POST請求的區別

範大腳腳發表於2017-11-14

瀏覽器中輸入網址訪問資源一般都是通過GET方式;在FORM提交中,可以通過Method指定提交方式為GET或者POST,預設為GET提交。

Http協議定義了與伺服器互動的不同方法,最基本的方法有4種,分別是GET、POST、PUT、DELETE。

URL全稱是資源描述符,可以認為一個URL地址用於描述一個網路上的資源,而HTTP中的GET,POST,PUT,DELETE就對應著對這個資源的查 ,改 ,增 ,刪 4個操作

GET 和 POST請求方法

在客戶機和伺服器之間進行請求-響應時,最常被用到的方法是GET 和 POST。

  • GET – 從指定的資源請求資料。
  • POST – 向指定的資源提交要被處理的資料

GET一般用於獲取/查詢資源資訊,而POST一般用於更新資源資訊

根據HTTP規範,GET用於資訊獲取,而且應該是安全的和冪等的 

1.所謂安全的意味著該操作用於獲取資訊而非修改資訊。換句話說,GET請求一般不應產生副作用。就是說,它僅僅是獲取資源資訊,就像資料庫查詢一樣,不會修改,增加資料,不會影響資源的狀態。

2.冪等的意味著對同一URL的多個請求應該返回同樣的結果。

冪等 (idempotent、idempotence)是一個數學或計算機學概念,常見於抽象代數中。

冪等有以下幾種定義:

對於單目運算,如果一個運算對於在範圍內的所有的一個數多次進行該運算所得的結果和進行一次該運算所得的結果是一樣的,那麼我們就稱該運算是冪等的。比如絕對值運算就是一個例子,在實數集中,有abs(a) =abs(abs(a)) 。

對於雙目運算,則要求當參與運算的兩個值是等值的情況下,如果滿足運算結果與參與運算的兩個值相等,則稱該運算冪等,如求兩個數的最大值的函式,有在在實數集中冪等,即max(x,x) = x 。

 

GET 方法

請注意,查詢字串(名稱/值對)是在 GET 請求的 URL 中傳送的:

1
/test/demo_form.asp?name1=value1&name2=value2

有關 GET 請求的其他一些註釋:

  • GET 請求可被快取
  • GET 請求保留在瀏覽器歷史記錄中
  • GET 請求可被收藏為書籤
  • GET 請求不應在處理敏感資料時使用
  • GET 請求有長度限制
  • GET 請求只應當用於取回資料

POST 方法

請注意,查詢字串(名稱/值對)是在 POST 請求的 HTTP 訊息主體中傳送的:

1
2
3
POST /test/demo_form.asp HTTP/1.1
Host: test.com
name1=value1&name2=value2

有關 POST 請求的其他一些註釋:

  • POST 請求不會被快取
  • POST 請求不會保留在瀏覽器歷史記錄中
  • POST 不能被收藏為書籤
  • POST 請求對資料長度沒有要求

比較 GET 與 POST

下面比較了GET 和 POST方法的一些區別

  GET POST
後退按鈕/重新整理 無害 資料會被重新提交(瀏覽器應該告知使用者資料會被重新提交)。
書籤 可收藏為書籤 不可收藏為書籤
快取 能被快取 不能快取
編碼型別 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。為二進位制資料使用多重編碼。
歷史 引數保留在瀏覽器歷史中。 引數不會儲存在瀏覽器歷史中。
對資料長度的限制 是的。當傳送資料時,GET 方法向 URL 新增資料;URL 的長度是受限制的(URL 的最大長度是 2048 個字元)。 無限制。
對資料型別的限制 只允許 ASCII 字元。 沒有限制。也允許二進位制資料。
安全性

與 POST 相比,GET 的安全性較差,因為所傳送的資料是 URL 的一部分。

在傳送密碼或其他敏感資訊時絕不要使用 GET !

POST 比 GET 更安全,因為引數不會被儲存在瀏覽器歷史或 web 伺服器日誌中。
可見性 資料在 URL 中對所有人都是可見的。 資料不會顯示在 URL 中。

本文轉自邴越部落格園部落格,原文連結:http://www.cnblogs.com/binyue/p/4536385.html,如需轉載請自行聯絡原作者


相關文章