GET和POST是HTTP請求的兩種基本方法,要說它們的區別,接觸過WEB開發的人都能說出一二。web
看似很簡單,實際上是一道送命題瀏覽器
「標準答案」:安全
HTTP 協議 未規定 GET 和POST的長度限制,服務器
GET的最大長度顯示是由於 瀏覽器和 web服務器限制了 URI的長度網絡
IE 和 Safari 瀏覽器 限制 2k併發
Opera 限制4k性能
Firefox 限制 8k(很是老的版本 256byte)優化
若是超出了最大長度,大部分的服務器直接截斷,也有一些服務器會報414錯誤。網站
GET和POST是HTTP協議中的兩種發送請求的方法。編碼
HTTP是基於TCP/IP的關於數據如何在萬維網中如何通訊的協議。
HTTP的底層是TCP/IP。
GET和POST本質上就是TCP連接,並沒有差異。可是因爲HTTP的規定和瀏覽器/服務器的限制,致使他們在應用過程當中體現出一些不一樣
HTTP對GET和POST參數的傳送渠道(url仍是requrest body)提出了要求
數據量太大對瀏覽器和服務器都是很大負擔。業界不成文的規定是,(大多數)瀏覽器一般都會限制url長度在2K個字節,而(大多數)服務器最多處理64K大小的url。超過的部分,恕不處理。若是你用GET服務,在request body偷偷藏了數據,不一樣服務器的處理方式也是不一樣的,有些服務器會幫你卸貨,讀出數據,有些服務器直接忽略,因此,雖然GET能夠帶request body,也不能保證必定能被接收到。
GET和POST還有一個重大區別:
GET產生一個TCP數據包;POST產生兩個TCP數據包。
對於GET方式的請求,瀏覽器會把http header和data一併發送出去,服務器響應200(返回數據);
而對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。
由於POST須要兩步,時間上消耗的要多一點,看起來GET比POST更有效。所以Yahoo團隊有推薦用GET替換POST來優化網站性能。但這是一個坑!跳入需謹慎。爲何?
1. GET與POST都有本身的語義,不能隨便混用。
2. 據研究,在網絡環境好的狀況下,發一次包的時間和發兩次包的時間差異基本能夠無視。而在網絡環境差的狀況下,兩次包的TCP在驗證數據包完整性上,有很是大的優勢。
3. 並非全部瀏覽器都會在POST中發送兩次包,Firefox就只發送一次。