瀏覽器中輸入網址訪問資源一般都是通過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 請求只應當用於取回數據
POST方法
請注意,查詢字符串(名稱/值對)是在 POST 請求的 HTTP 消息主體中發送的:
1 POST /test/demo_form.asp HTTP/1.1 2 Host: test.com 3 name1=value1&name2=value2
有關 POST 請求的其他一些注釋:
- POST 請求不會被緩存
- POST 請求不會保留在瀏覽器歷史記錄中
- POST 不能被收藏為書簽
- 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 中。 |