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的能⼒也是不⼀样的。
下⾯就是对各种浏览器和服务器的最⼤处理能⼒做⼀些说明.
url编码和utf8区别
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获取参数值就可以了。试了⼀下,数据量⽐较⼤时,都没有问题。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论