get和post是HTTP協議中兩種不同的請求方式。
get和post的區別可以大致分爲兩種,一種是請求格式,一種是弱規定(暫且這麼稱呼吧)。
首先是請求格式,get請求會將參數以?key1=value1&key2=value2的形式拼接到url後面,開頭是一個問號(?),多個參數用符號(&)來連接。post請求的參數則會隱藏在請求體中,多個參數連接和get一樣,只是開頭比get少一個問號(?)。
Get請求:
GET /login?user=hxl&passwd=abc123 HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Origin: null
Connection: keep-alive
Post請求:
POST /login HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 22
Origin: null
Connection: keep-alive
user=hxl&passwd=abc123
那麼,由此帶來什麼問題呢?
首先,get請求將參數拼接到url後面,會直接顯示在瀏覽器上面,因此,有可能有一些敏感的數據會暴露出來,所以相對於post來說,這是不安全的。但是也帶來了一個好處,也就是可以作爲書籤收藏。其次,get請求的url是有字符限制的,這個取決於服務器,通常來說是1024個字節,而post沒有,所以如果要傳輸一個大字符的參數,比如圖片的字節碼,應該選用post。
接下來說一下弱規定,http協議中規定,get請求是冪等的,而post請求是非冪等的。冪等這個概念講清楚還挺煩的,我們可以把它轉化爲List類來理解,冪等操作就相當於是類屬性的get方法,無論調用多少次,只要參數index一致,總是能get到一個相同的值。非冪等操作就相當於add方法,雖然每次調用都是add同一個值,但是List的size會隨着調用次數的增加而增加。所以,post要保持冪等性,必須做出重複判斷。當然,規定是這麼規定,程序怎麼寫還是掌握在我們手中,比如在get請求中寫一個add操作……當然,最好不要這麼做
所以,弱規定中就規定了,get請求應該只寫冪等操作的程序,比如查詢功能。post請求則負責寫非冪等的操作,比如添加功能。
總結:
區別:
1、數據大小
2、安全性
3、書籤
應用場景:
如果希望某個網頁可以被隨意分享,方便用戶存書籤,或者查詢不敏感的數據時,用get請求。get請求不應該對服務器造成影響(如查詢功能)。
如果傳遞的參數敏感,或者可能對服務器產生影響的,應該使用post請求(如添加、更改、刪除等)。