容易忽视的url长度限制(浏览器限制,http协议并无规定)

近期在做一个热补丁,其中有个界面在IE6下超链接无法打开,经查是链接地址太长,2161个字节,已经超出ie6,7的长度限制,现把发现此问题的过程分享给大家。
===过程=====
1、万恶的ie6,连调试都没有好的工具,ietest又不靠谱。虽然现在业界都呼吁抛弃ie6,但我们的用户还在大量使用,没办法,还得解决此问题。
2、点击超链接,没有任何反应,也没有任何js错误提示
3、检查浏览器设置,勾上了"显示每个脚本错误的通知",去掉了"禁用脚本调试"
4、再次点击,仍然没有任何错误提示,看来js代码没有错误了。也许有人会说,点击超链接怎么会有js错误,因为我们的超链接是这样写的 <a href="javascript:ckmx('xh')" >
5、问题挺奇怪,我就在其他浏览器(ie10,chrome)中把要打开的链接复制出来,粘贴在ie的地址栏里
6、不小心把地址栏中ip位置的字符给删了,那我就重新改一下,却发现根本无法输入任何字符,由此,我猜想可能url过长了
7、把url拷贝到ue中,发现url占用了2161个字节,ie,7的url限制在2048个
 
====原因及解决办法====
1、查看了链接地址的拼写,发现链接是这样写的
      location.href = _url + _param + '&returnURL='+encodeURIComponent('[%HTML::TEXT.requestURL2%]');
     _param也就一个参数,那看来肯定是[%HTML::TEXT.requestURL2%]造成的。
2、按理说[%HTML::TEXT.requestURL2%]也不会超长的,仔细看来发现我们的界面返回都是利用这个参数来返回到上个界面的,现在的这个界面已经经过了5轮钻取,A>B>C>D>E,经过前边4轮后,requestURL2已经非常长了,才造成了这个问题。
3、当前界面的链接地址改为location.href = _url + _param;不再拼接后边的参数。下一个界面的返回简单实用window.history.back();
 
这个问题一般情况下不会发生,发此贴给大家个警示,无意间就造成了此问题。
firefox,chrome,Opera的url长度都是4098个;
ie8之后网上没搜到,也没去官网查,不过我们这个界面ie8,ie10都能打开,估计他们也改为了4098
ie6,7的长度是2048

相关推荐