各瀏覽器的url傳值的長度限制解決辦法

 

今天寫到兩個頁面傳值,剛開始通過url上加參數進行傳值,

var strLink = "my.asp?str1=" + str1List + "&str2=" + str2List ;
var iHeight = 600;                                                          // 高度
var iWidth = 1000;                                                         // 寬度
var iTop = (window.screen.availHeight - 30 - iHeight) / 2;                     // 獲得窗口的垂直位置;
var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;                       // 獲得窗口的水平位置;
window.open(strLink, "_blank", "status=yes,resizable=yes,scrollbars=yes,menubar=yes,width=" + iWidth + ",height=" + iHeight + ",left=" + iLeft + ",top=" + iTop)

其中str1List是一個單號的列表,str2是另外一個單號的列表,將參數傳到my.asp,然後用Request.QueryString獲取參數的值進行處理,剛開始my.asp頁面運行沒有問題,可是當單號的數據量比較大的時候,my.asp頁面就報錯。經過排查,發現參數傳到my.asp後,str1List數量少了,str2List沒了,才知道應該是url傳值時,數據沒截掉了。

然後上網查了一下,發現url是有長度限制了,網上是這樣說的:

通過URL傳值的問題,所以對url字符串進行encodeURIComponent對url字符串內容進行編碼,問題解決,但是有時候會出現 The request filtering module is configured to deny a request where the query string is too long,問題的原因是 以get方式傳字符串的時候,有長度限制。

IIS 7對於Query String有長度限制。默認爲2048.

該問題的解決辦法可以通過修改configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryString setting.

<requestLimits maxQueryString="length" />

各瀏覽器與各Web Server對URL均有長度的限制如下:

在http協議中,其實並沒有對url長度作出限制,往往url的最大長度和用戶瀏覽器和Web服務器有關,不一樣的瀏覽器,能接受的最大長度往往是不一樣的,當然,不一樣的Web服務器能夠處理的最大長度的URL的能力也是不一樣的。
下面就是對各種瀏覽器和服務器的最大處理能力做一些說明.

Microsoft Internet Explorer (Browser)
IE瀏覽器對URL的最大限制爲2083個字符,如果超過這個數字,提交按鈕沒有任何反應。

Firefox (Browser)
對於Firefox瀏覽器URL的長度限制爲65,536個字符,但當我測試時,最大隻能處理8182個字符,這是因爲url的長度除了瀏覽器限制外,還會受Web服務器的限制。

Safari (Browser)
URL最大長度限制爲 80,000個字符。

Opera (Browser)
URL最大長度限制爲190,000個字符。

Google (chrome)
url長度一旦超過8182個字符時,出現如下服務器錯誤:

寫道

Request-URI Too Large
The requested URL's length exceeds the capacity limit for this server.
Apache/2.2.12 (Ubuntu) Server at 127.0.1.1 Port 80

Apache (Server)
能接受最大url長度爲8,192個字符。

Microsoft Internet Information Server(IIS)
能接受最大url的長度爲16,384個字符。

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

可能有些朋友會想當然的認爲,如果最大長度限制爲2038字符,是不是參數差不多可以傳遞1000個左右的漢字。這樣認爲其實是不對的,對於中文的傳遞,最終會爲urlencode後的編碼形式進行傳遞,如果瀏覽器的編碼爲UTF8的話,一個漢字最終編碼後的字符長度爲9個字符。

 

這是網上引用過來的,總的來說,就是不同的瀏覽器對url都有不同的長度限制的。

這樣的話,我上面的問題句真的不能用url傳值了,因爲我的str1List和str2List長度是不定了,只能想其他途徑了。

經過一番琢磨,發現使用建議使用表單+POST方法傳參,這樣就沒有大小限制了。
其實我是要把當前頁面<form action="my.asp" method="post">
然後跳到my.asp頁面後,用request.Form獲取參數值就可以了。

但是我的當前頁面還不能這樣做,因爲form的action已經用戶另一個頁面了,所以還不能這樣做,

最後,通過在button提交的js中寫上提交頁面,如下:

      var iHeight = 600;                                                          // 高度
      var iWidth = 1000;                                                         // 寬度
      var iTop = (window.screen.availHeight - 30 - iHeight) / 2;                     // 獲得窗口的垂直位置;
      var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;                       // 獲得窗口的水平位置;
      window.open("", "test", "status=yes,resizable=yes,scrollbars=yes,menubar=yes,width=" + iWidth + ",height=" + iHeight + ",left=" + iLeft + ",top=" + iTop)

      document.forms[0].action = "my.asp“;
      document.forms[0].target = "test";
      document.forms[0].submit();

然後在跳到my.asp頁面後,用request.Form獲取參數值就可以了。試了一下,數據量比較大時,都沒有問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章