java中pagex_Java/5_get和post比较.md at master · zaoshangyaochifan/Java · GitHub
#九、GET 和 POST 比較
Http報文層面:
作用
GET 用于獲取資源,而 POST 用于傳輸實體主體。
參數
GET 和 POST 的請求都能使用額外的參數,但是 GET 的參數是以查詢字符串出現在 URL 中,而 POST 的參數存儲在實體主體中。不能因為 POST 參數存儲在實體主體中就認為它的安全性更高,因為照樣可以通過一些抓包工具(Fiddler)查看。
因為 URL 只支持 ASCII 碼,因此 GET 的參數中如果存在中文等字符就需要先進行編碼。例如 中文 會轉換為 %E4%B8%AD%E6%96%87,而空格會轉換為 %20。POST 參考支持標準字符集。
GET /test/demo_form.asp?name1=value1&name2=value2 HTTP/1.1
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
數據庫層面:
安全性
安全的 HTTP 方法不會改變服務器狀態,也就是說它只是可讀的。
GET 方法是安全的,而 POST 卻不是,因為 POST 的目的是傳送實體主體內容,這個內容可能是用戶上傳的表單數據,上傳成功之后,服務器可能把這個數據存儲到數據庫中,因此狀態也就發生了改變。
安全的方法除了 GET 之外還有:HEAD、OPTIONS。
不安全的方法除了 POST 之外還有 PUT、DELETE。
冪等性
冪等的 HTTP 方法,同樣的請求被執行一次與連續執行多次的效果是一樣的,服務器的狀態也是一樣的。換句話說就是,冪等方法不應該具有副作用(統計用途除外)。
所有的安全方法也都是冪等的。
在正確實現的條件下,GET,HEAD,PUT 和 DELETE 等方法都是冪等的,而 POST 方法不是。
GET /pageX HTTP/1.1 是冪等的,連續調用多次,客戶端接收到的結果都是一樣的:
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
GET /pageX HTTP/1.1
POST /add_row HTTP/1.1 不是冪等的,如果調用多次,就會增加多行記錄:
POST /add_row HTTP/1.1 -> Adds a 1nd row
POST /add_row HTTP/1.1 -> Adds a 2nd row
POST /add_row HTTP/1.1 -> Adds a 3rd row
DELETE /idX/delete HTTP/1.1 是冪等的,即便不同的請求接收到的狀態碼不一樣:
DELETE /idX/delete HTTP/1.1 -> Returns 200 if idX exists
DELETE /idX/delete HTTP/1.1 -> Returns 404 as it just got deleted
DELETE /idX/delete HTTP/1.1 -> Returns 404
其他層面:
可緩存
如果要對響應進行緩存,需要滿足以下條件:
請求報文的 HTTP 方法本身是可緩存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可緩存,POST 在多數情況下不可緩存的。
響應報文的狀態碼是可緩存的,包括:200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501。
響應報文的 Cache-Control 首部字段沒有指定不進行緩存。
XMLHttpRequest
為了闡述 POST 和 GET 的另一個區別,需要先了解 XMLHttpRequest:
XMLHttpRequest 是一個 API,它為客戶端提供了在客戶端和服務器之間傳輸數據的功能。它提供了一個通過 URL 來獲取數據的簡單方式,并且不會使整個頁面刷新。這使得網頁只更新一部分頁面而不會打擾到用戶。XMLHttpRequest 在 AJAX 中被大量使用。
在使用 XMLHttpRequest 的 POST 方法時,瀏覽器會先發送 Header 再發送 Data。但并不是所有瀏覽器會這么做,例如火狐就不會。
而 GET 方法 Header 和 Data 會一起發送。
總結
以上是生活随笔為你收集整理的java中pagex_Java/5_get和post比较.md at master · zaoshangyaochifan/Java · GitHub的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java有什么字符串_Java 中操作字
- 下一篇: java list set map的区别