GET和POST的區別

首先,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?

顯然不能

  • GET與POST都有本身的語義,不能隨便混用
  • 據研究,在網絡環境好的狀況下,發一次包的時間和發兩次包的時間差異基本能夠無視。而在網絡環境差的狀況下,兩次包的TCP在驗證數據包完整性上,有很是大的優勢

並非全部瀏覽器都會在POST中發送兩次包,Firefox就只發送一次

二、GET不安全,可否所有用POST?

顯然也不能

  • 對數據請求頻繁,數據不敏感且數據量在普通瀏覽器最小限定的2k範圍內,這樣的狀況最適合使用GET
相關文章
相關標籤/搜索