淺談 HTTP中Get與Post的區別


淺談 HTTP中Get與Post的區別

存在的誤區

有人說 HTTP 協議下的 Get 請求參數長度是有大小限制的,最大不能超過XX,而 Post 是無限制的,看到這里,我想他們定是看多了一些以訛傳訛的博客或者書籍,導致一種理解上的誤區:

1.HTTP 協議從未規定 GET/POST 的請求長度限制是多少。
2.所謂的請求長度限制是由瀏覽器和 web 服務器決定和設置的,各種瀏覽器和 web 服務器的設定均不一樣,這依賴於各個瀏覽器廠家的規定或者可以根據 web 服務器的處理能力來設定。
1.get

HTTP協議規范沒有對URL長度進行限制,但是一般瀏覽器會限制

如:IE對URL長度的限制是2083字節(2K+35)。

首先是"GET方式提交的數據最多只能是1024字節",因為GET是通過URL提交數據,那么GET可提交的數據量就跟URL的長度有直接關系 了。而實際上,URL不存在參數上限的問題,HTTP協議規范沒有對URL長度進行限制。這個限制是特定的瀏覽器及服務器對它的限制。IE對URL長度的限制是2083字節(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操作系統的支持。
注意這是限制是整個URL長度,而不僅僅是你的參數值數據長度。
【get方式提交數據的大小,http協議並沒有硬性限制;而是與瀏覽器及服務器、操作系統有關。使用get方式,url最長可達8167b】
2.post
理論上講,POST是沒有大小限制的。HTTP協議規范也沒有進行大小限制,起限制作用的是服務器的處理程序的處理能力。
如:在Tomcat下取消POST大小的限制(Tomcat默認2M);
3.GET和POST還有一個重大區別:
簡單的說:
GET產生一個TCP數據包;POST產生兩個TCP數據包。
長的說:
對於GET方式的請求,瀏覽器會把http header和data一並發送出去,服務器響應200(返回數據);
而對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。
也就是說,GET只需要汽車跑一趟就把貨送到了,而POST得跑兩趟,第一趟,先去和服務器打個招呼“嗨,我等下要送一批貨來,你們打開門迎接我”,然后再回頭把貨送過去。
因為POST需要兩步,時間上消耗的要多一點,看起來GET比POST更有效。因此Yahoo團隊有推薦用GET替換POST來優化網站性能。但這是一個坑!跳入需謹慎。為什么?
1. GET與POST都有自己的語義,不能隨便混用。
2. 據研究,在網絡環境好的情況下,發一次包的時間和發兩次包的時間差別基本可以無視。而在網絡環境差的情況下,兩次包的TCP在驗證數據包完整性上,有非常大的優點。
3. 並不是所有瀏覽器都會在POST中發送兩次包,Firefox就只發送一次。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM