url传值的长度限制解决办法

摘要:
Firefox将Firefox浏览器URL的长度限制为65536个字符,但当我测试时,我最多只能处理8182个字符。这是因为URL的长度受到Web服务器和浏览器的限制。这不是真的。对于中文的传输,它最终将以urlencode的形式传输。如果浏览器代码为UTF8,则最终编码后的汉字长度为9个字符。这句话引自互联网。一般来说,不同的浏览器对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 thisserver.
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获取参数值就可以了。试了一下,数据量比较大时,都没有问题。

免责声明:文章转载自《url传值的长度限制解决办法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇8天入门wpf(转)JBOSS未授权访问漏洞复现下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux col命令详解

Linux col命令 Linux col命令用于过滤控制字符。 在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符">"和">>",把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col指令则能有效滤除这些控制字符。 用法 col [-bfpx] [-l nline] 参数 -b 过滤掉所有的控制字符,包...

Qt正则表达式类QRegExp(转)

QRegExp是Qt的正则表达式类.Qt中有两个不同类的正则表达式.第一类为元字符.它表示一个或多个常量表达式.令一类为转义字符,它代表一个特殊字符.一.元字符.匹配任意单个字符.例如,1.3可能是1.后面跟任意字符,再... QRegExp是Qt的正则表达式类.Qt中有两个不同类的正则表达式.第一类为元字符.它表示一个或多个常量表达式.令一类为 转义字符...

【SSRF】之SSRF的理论知识

(本文仅为平时学习记录,若有错误请大佬指出,如果本文能帮到你那我也是很开心啦) 本文参考https://xz.aliyun.com/t/2115#toc-2,十分感谢! 一、概念 SSRF全称为Server-side Request Fogery,中文含义为服务器端请求伪造,漏洞产生的原因是服务端提供了能够从其他服务器应用获取数据的功能,比如从指定的UR...

11-linux基础八-正则表达式

1. 正则表达式的概念及特点:   正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。规定一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式(Regular Expression)。...

Vue项目上线后刷新报错404问题(apache,nginx,tomcat)

一、 Vue项目打包发布apache报错: route,配置一个覆盖所有的路由情况 1、需要修改router/index.js中new Router 配置,加一个base: '/htcm_front/', 它指定应用的基路径,该应用是服务于localhost/htcm_front路径下,所以必须加base配置,否则应用会展示404页面 2、需要修改conf...

linux下vi命令 修改文件及保存的使用方法

移动光标类命令 h :光标左移一个字符 l :光标右移一个字符 space:光标右移一个字符 Backspace:光标左移一个字符 k或Ctrl p:光标上移一行 j或Ctrl n :光标下移一行 Enter :光标下移一行 w或W :光标右移一个字至字首 b或B :光标左移一个字至字首 e或E :光标右移一个字至字尾 ) :光标移至句尾 ( :光标移至句...