http請求之get和post的區別
前言:
大家現在度娘一下,查得最多的區別,可能就是:
“Get把參數寫在URL中,Post通過請求體來傳參的”
“GET沒有POST安全,因為Get參數直接顯示在URL上”
“Get請求在URL中傳送的參數是有長度限制的,而POST是沒有的”
但是,真相是這樣的嗎?!!!真相永遠只有一個!!!
先分析一波:
GET和POST與數據如何傳遞沒有關系??
GET和POST是由HTTP協議定義的。那么使用哪個方式與應用層的數據如何傳輸是沒有相互關系的。從而,HTTP就沒有要求,POST一定要放到請求體里面,GET就一定要放到URL里面。
在HTML標准中,是有着類似的定義。但這只是HTML標准對HTTP協議的用法的約定。也就是規范上說,無區別。
那么,這個說法是從何而來的呢?是因為有各種瀏覽器等軟件的實現,就變成了我們現在熟知的現象,GET要用URL傳參,POST用body傳參。
HTTP協議對GET和POST有沒有對長度的限制??
HTTP協議明確地指出了,HTTP請求頭和請求體都沒有長度的要求。
而對於URL長度上的限制,有兩方面的原因造成:
1. 瀏覽器。據說IE對URL長度會限制在2048個字符內。但是就我所知,firefox是支持10W以上的長度。
2. 服務器。服務器處理超長的URL本身就是一種負擔,更何況遭受惡意攻擊呢?因此,多數服務器出於安全、穩定等多方面的考慮,會給URL長度加限制。
但是這個限制是針對所有HTTP請求的,與GET、POST沒有關系。
安全不安全和GET、POST有沒有關系??
這個問題,首先你得確認面向對象。
舉個例子:
1.你現在要讓我爸爸媽媽去看看這個URL,你覺得安全嗎?
2.你現在要讓一個剛入門的初級功能測試工程師去測試這個鏈接,你覺得安全嗎?
3.你現在要讓安全測試工程師去看看get請求,你覺得安全嗎?
所以,針對不同的人群,安全的定義就會不一樣。
“如果你願意一層一層一層的剝開我的心 ,你會發現你會訝異 ,你是我最壓抑 ,最深處的秘密 ”
把Get和Post剝開后,他們的本質上就是TCP鏈接,並無差別。
只是由於HTTP的規定和瀏覽器/服務器的限制,導致他們在應用過程中體現出一些不同。
那么真相到底是什么呢?
對於POST,瀏覽器先發送header,服務器響應100(continue),然后再發送data,服務器響應200(返回數據);