首先,GET和POST是HTTP請求的兩種基本方法~瀏覽器
「江湖上」流傳的GET和POST區別安全
一、GET提交的數據會放在URL以後,以 ?分割URL和傳輸數據,參數之間用 & 相連,如 EditPosts.aspx?name=boKeYuan&id=123456;POST方法是把提交的數據放在HTTP包的Body中服務器
二、GET提交的數據大小有限制(注意:Http Get方法提交的數據大小長度並無限制,HTTP協議規範沒有對URL長度進行限制,這個限制是特定的瀏覽器及服務器對它的限制);POST方法提交的數據沒有限制網絡
三、對參數的數據類型,GET只接受ASCII字符;而POST沒有限制spa
四、GET請求參數會被完整保留在瀏覽器歷史記錄裏;而POST中的參數不會被保留資源
五、GET比POST更不安全,由於參數直接暴露在URL上,因此不能用來傳遞敏感信息it
HTTPrequest
一、HTTP是是基於TCP/IP協議族的關於數據如何在萬維網中通訊的協議。HTTP定義了不少與服務器交互得方法,最基本的有四種:GET、POST、PUT、DELETE,這四個方法對應着對請求資源的查、改、增、刪 4個操做。本篇文章只介紹GET和POST。數據類型
二、HTTP的底層是TCP/IP,因此GET和POST底層也是TCP/IP。封裝好的HTTP報文是要交給TCP去處理的。請求
TCP
一、TCP是運輸層的協議,將應用層傳過來的HTTP報文分割成報文段,傳送給通訊的對方,TCP是可靠交付,可以保證數據完整的傳達給對方。
二、在整個萬維網世界中,會有無數個TCP鏈接,怎麼區分這些TCP鏈接呢?這就要用到協議規範HTTP了,HTTP指明每個TCP鏈接是POST或者GET。
HTTP只是個行爲準則,而TCP纔是POST和GET怎麼實現的基本。
瀏覽器和服務器
一、TCP在瀏覽器和服務器之間創建鏈接,而且在二者之間按照客戶需求傳輸信息(數據)。若是傳輸的信息過大,對於瀏覽器和服務器來講都是很大的負擔,大多數瀏覽器都會限制 URL 在2K個字節,而大多數服務器最多處理64K大小的 URL。超出的部分,直接丟棄~
二、上面提到過,GET方法的數據是放在 URL 中的,若是你在 request body 中偷偷藏了數據,不一樣的服務器處理方式也是不一樣的,有的會「好心」讀出,有的則「視而不見」~
三、說到這裏,你應該明白了,GET和POST本質上就是TCP鏈接。
GET和POST的根本區別
GET產生一個數據包,POST產生兩個數據包
多數瀏覽器(Firefox就只發送一次)對於POST採用兩階段發送數據:先發送請求頭(header數據),再發送請求體(body部分)。這會致使在傳輸層中出現兩次TCP鏈接,對於TCP來講,通訊次數越多可靠性越低,能在一次鏈接中傳輸完須要的消息是最可靠的。
而GET方法只須要創建一次鏈接就能發送全部數據了。
使用狀況
POST和GET各有本身的優缺點,根據需求來選擇使用GET或POST。
一、好比有人這樣問,POST須要兩步,時間上消耗的更多,可否用GET來替換POST?
顯然不能
並非全部瀏覽器都會在POST中發送兩次包,Firefox就只發送一次
二、GET不安全,可否所有用POST?
顯然也不能