1. 程式人生 > >關於get請求引數的長度和post請求引數的長度的區別

關於get請求引數的長度和post請求引數的長度的區別

最近在做一個上傳圖片的功能,用到了post請求,通過網上查閱資料,對post請求的引數長度有了進一步的理解,所以索性就把以前學過的get和post 請求引數的異同點,進行總結,以備記憶!

     一、  Get方法長度限制

首先Http Get方法提交的資料大小長度並沒有限制,HTTP協議規範沒有對URL長度進行限制。這個限制是特定的瀏覽器及伺服器對它的限制。

比如IE對URL長度的限制是2083位元組(2K+35)。

下面就是對各種瀏覽器和伺服器的最大處理能力做一些說明.
Microsoft Internet Explorer (Browser)
IE瀏覽器對URL的最大限制為2083個字元,如果超過這個數字,提交按鈕沒有任何反應。
Firefox (Browser)
對於Firefox瀏覽器URL的長度限制為65,536個字元。
Safari (Browser)
URL最大長度限制為 80,000個字元。
Opera (Browser)
URL最大長度限制為190,000個字元。
Google (chrome)
URL最大長度限制為8182個字元。
Apache (Server)
能接受最大url長度為8,192個字元。
Microsoft Internet Information Server(IIS)
能接受最大url的長度為16,384個字元。

通過上面的資料可知,為了讓所有的使用者都能正常瀏覽, URL最好不要超過IE的最大長度限制(2083個字元),當然,如果URL不直接提供給使用者,而是提供給程式呼叫,這時的長度就只受Web伺服器影響了。
注:對於中文的傳遞,最終會為urlencode後的編碼形式進行傳遞,如果瀏覽器的編碼為UTF8的話,一個漢字最終編碼後的字元長度為9個字元。
因此如果使用的 GET 方法,最大長度等於URL最大長度減去實際路徑中的字元數。

2.    POST方法長度限制

理論上講,POST是沒有大小限制的。HTTP協議規範也沒有進行大小限制,起限制作用的是伺服器的處理程式的處理能力。
如:在Tomcat下取消POST大小的限制(Tomcat預設2M);
開啟tomcat目錄下的conf目錄,開啟server.xml 檔案,修改
debug="0"
acceptCount="100"
connectionTimeout="20000"
disableUploadTimeout="true"
port="8080"
redirectPort="8443"
enableLookups="false"
minSpareThreads="25"
maxSpareThreads="75"
maxThreads="150"
maxPostSize="0"


URIEncoding="GBK"

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

理解上的誤區:

1、首先即使有長度限制,也是限制的是整個 URI 長度,而不僅僅是你的引數值資料長度。
2、HTTP 協議從未規定 GET/POST 的請求長度限制是多少。

3、所謂的請求長度限制是由瀏覽器和 web 伺服器決定和設定的,各種瀏覽器和 web 伺服器的設定
均不一樣,這依賴於各個瀏覽器廠家的規定或者可以根據 web 伺服器的處理能力來設定。

以上通過驗證,post請求 使用tomcat伺服器,上傳大於2M的圖片,後臺沒有接收到任何的引數,通過設定maxPostSize="0",

之後上傳圖片就顯示成功了,而且上傳10M的照片也沒有出現問題。只是這種上傳圖片要考慮伺服器的負載和安全性,如果post沒限制,上傳的圖片過大過多,會不會讓伺服器崩潰。而且萬一伺服器被攻擊,會不會被人惡意灌滿。

以上是本人的分析,有不足之處,還望大神們多加指點!

參考文章:http://blog.chinaunix.net/uid-26602509-id-4495786.html