web筆記三:Http協議中get和post請求

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請求(如添加、更改、刪除等)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章