java中pagex_Java/5_get和post比较.md at master · zaoshangyaochifan/Java · GitHub
#九、GET 和 POST 比較
Http報(bào)文層面:
作用
GET 用于獲取資源,而 POST 用于傳輸實(shí)體主體。
參數(shù)
GET 和 POST 的請求都能使用額外的參數(shù),但是 GET 的參數(shù)是以查詢字符串出現(xiàn)在 URL 中,而 POST 的參數(shù)存儲(chǔ)在實(shí)體主體中。不能因?yàn)?POST 參數(shù)存儲(chǔ)在實(shí)體主體中就認(rèn)為它的安全性更高,因?yàn)檎諛涌梢酝ㄟ^一些抓包工具(Fiddler)查看。
因?yàn)?URL 只支持 ASCII 碼,因此 GET 的參數(shù)中如果存在中文等字符就需要先進(jìn)行編碼。例如 中文 會(huì)轉(zhuǎn)換為 %E4%B8%AD%E6%96%87,而空格會(huì)轉(zhuǎn)換為 %20。POST 參考支持標(biāo)準(zhǔn)字符集。
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
數(shù)據(jù)庫層面:
安全性
安全的 HTTP 方法不會(huì)改變服務(wù)器狀態(tài),也就是說它只是可讀的。
GET 方法是安全的,而 POST 卻不是,因?yàn)?POST 的目的是傳送實(shí)體主體內(nèi)容,這個(gè)內(nèi)容可能是用戶上傳的表單數(shù)據(jù),上傳成功之后,服務(wù)器可能把這個(gè)數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫中,因此狀態(tài)也就發(fā)生了改變。
安全的方法除了 GET 之外還有:HEAD、OPTIONS。
不安全的方法除了 POST 之外還有 PUT、DELETE。
冪等性
冪等的 HTTP 方法,同樣的請求被執(zhí)行一次與連續(xù)執(zhí)行多次的效果是一樣的,服務(wù)器的狀態(tài)也是一樣的。換句話說就是,冪等方法不應(yīng)該具有副作用(統(tǒng)計(jì)用途除外)。
所有的安全方法也都是冪等的。
在正確實(shí)現(xiàn)的條件下,GET,HEAD,PUT 和 DELETE 等方法都是冪等的,而 POST 方法不是。
GET /pageX HTTP/1.1 是冪等的,連續(xù)調(diào)用多次,客戶端接收到的結(jié)果都是一樣的:
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 不是冪等的,如果調(diào)用多次,就會(huì)增加多行記錄:
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 是冪等的,即便不同的請求接收到的狀態(tài)碼不一樣:
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
其他層面:
可緩存
如果要對響應(yīng)進(jìn)行緩存,需要滿足以下條件:
請求報(bào)文的 HTTP 方法本身是可緩存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可緩存,POST 在多數(shù)情況下不可緩存的。
響應(yīng)報(bào)文的狀態(tài)碼是可緩存的,包括:200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501。
響應(yīng)報(bào)文的 Cache-Control 首部字段沒有指定不進(jìn)行緩存。
XMLHttpRequest
為了闡述 POST 和 GET 的另一個(gè)區(qū)別,需要先了解 XMLHttpRequest:
XMLHttpRequest 是一個(gè) API,它為客戶端提供了在客戶端和服務(wù)器之間傳輸數(shù)據(jù)的功能。它提供了一個(gè)通過 URL 來獲取數(shù)據(jù)的簡單方式,并且不會(huì)使整個(gè)頁面刷新。這使得網(wǎng)頁只更新一部分頁面而不會(huì)打擾到用戶。XMLHttpRequest 在 AJAX 中被大量使用。
在使用 XMLHttpRequest 的 POST 方法時(shí),瀏覽器會(huì)先發(fā)送 Header 再發(fā)送 Data。但并不是所有瀏覽器會(huì)這么做,例如火狐就不會(huì)。
而 GET 方法 Header 和 Data 會(huì)一起發(fā)送。
總結(jié)
以上是生活随笔為你收集整理的java中pagex_Java/5_get和post比较.md at master · zaoshangyaochifan/Java · GitHub的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java有什么字符串_Java 中操作字
- 下一篇: mysql partition 性能_通