Get請求攜帶數據量的各種限制及解決辦法、Post請求說明


 1.   Get請求攜帶數據量的各種限制及解決辦法

Http Get方法提交的數據大小長度並沒有限制,HTTP協議規范沒有對URL長度進行限制。這個限制是特定的瀏覽器及服務器對它的限制。

到新公司處理的第一個線上問題是某個商品頁,在某個人機器上訪問失敗,nginx返回400錯誤,但其它人機器上沒有問題,即使用虛擬機重建了出問題機器的軟硬件環境也不會出問題。

經過對出問題機器的http請求進行抓包,發現URL超長,cookie也很大,然后問題就很清楚了,因為大部分人用的是IE瀏覽器,IE瀏覽器限 制了URL長度,做了自動截斷處理,所以總的http header不會超出nginx的限制,可以正常返回,而使用同樣瀏覽器,不限制URL長度,但cookie長度較短,沒超過nginx的header緩 沖區限制,也不會造成400錯誤。


解決辦法就是修改nginx、tomcat等使用到的應用服務器,讓他們支持更大的header緩沖區。當然從兼容性等方面的考慮,根本解決辦法是不要通過GET方式傳遞超長的參數。


==================下邊列出了各個瀏覽器的限制和處理辦法=========================

附:各瀏覽器對URL的長度限制(單位:字符個數)
IE : 2083
Firefox:65536
Chrome:8182
Safari:80000
Opera:190000

 

附:各Web服務器對URL的長度限制(單位:字符個數)

Apache (Server)

能接受最大url長度為8,192個字符。

Microsoft Internet Information Server(IIS)

能接受最大url的長度為16,384個字符。

通過上面的數據可知,為了讓所有的用戶都能正常瀏覽, URL最好不要超過IE的最大長度限制(2083個字符),當然,如果URL不直接提供給用戶,而是提供給程序調用,這時的長度就只受Web服務器影響了。

注:對於中文的傳遞,最終會為urlencode后的編碼形式進行傳遞,如果瀏覽器的編碼為UTF8的話,一個漢字最終編碼后的字符長度為9個字符。

因此如果使用的 GET 方法,最大長度等於URL最大長度減去實際路徑中的字符數。



附:各瀏覽器允許域下的最大cookie數目
IE :原先為20個,后來升級為50個
Firefox: 50個
Opera:30個
Chrome:180個
Safari:無限制


附:瀏覽器所允許的每個Cookie的最大長度
 
Firefox和Safari:4079字節
Opera:4096字節
IE:4095字節


附:各應用服務器設置header頭部的參數

nginx:client_header_buffer_size和large_client_header_buffers
tomcat:maxHttpHeaderSize
 
Tomcat之get請求長度設置:
<Connector port="8080" maxHttpHeaderSize="65536"
 
 

2.    POST請求長度限制

理論上講,POST是沒有大小限制的。HTTP協議規范也沒有進行大小限制,起限制作用的是服務器的處理程序的處理能力。

如:在Tomcat下取消POST大小的限制(Tomcat默認2M);

打開tomcat目錄下的conf目錄,打開server.xml 文件,修改

<Connector

debug="0"

acceptCount="100"

connectionTimeout="20000"

disableUploadTimeout="true"

port="8080"

redirectPort="8443"

enableLookups="false"

minSpareThreads="25"

maxSpareThreads="75"

maxThreads="150"

maxPostSize="0"

URIEncoding="GBK"

</Connector>

增加紅色字體部分 maxPostSize="0" (設為0是取消POST的大小限制)

 
 


免責聲明!

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



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