`
ralphr
  • 浏览: 143563 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ie6 ie7 ie8 url长度的问题

    博客分类:
  • web
阅读更多

最近用Ajax来做一个东东,可是在IE8中没错误,IE6、7都出现了错误,最终确认是因为url长度的问题,我的url长度很大有超过4000个字节,而ie6、7不支持这样长的url,ie8是可以,这样就导致了两个问题:

以下将这个长度很长的url简称myurl,且在两个页面都要用到它长长的querystring

1,用模式对话框打开新窗体,即showModalDialog是url过长,ie6、ie7打开的页面出错

2,用ajax的get方法请求另外一个页面ie6、ie7均失败

解决方案:

1,通过showModalDialog的第二个参数,将包含常常的querystring里边的绝大部分内容传到模式对话框,

var result = openDialog(url, input, 600, 400, 'status:yes;help:yes;scroll:yes');//这里的inpu是包含那部分常常内容的input

而模式对话框的页面通过document.getElementById('HiddenXml').value=window.dialogArguments.value;来获取值window.dialogArguments.value,这在ie6、7、8、Firefox3.5下均正常

2,ajax使用post的方法而不是get的方法

if(method=='POST')
{
xml.setRequestHeader("Content-Length",queryString.length);
}
xml.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

记得一定要设置请求头部的content-length和conten-type

 

xmlHttp.send(); 它可以带参数传递。
但你在调用send()方法之前要调用xmlHttp.setRequestHeader('Content-Type', 'application/x-www-

form-urlencoded');,不然会得不到数据。

 

当我们要尝试用GET方式传递WEB页面参数时,不得不考虑会不会因为浏览器地址栏长度限制导致错误。虽然用google能得到一堆,但是也许这些数据会互相矛盾。眼见为实,我用下面的方法测试了一下目前的各种浏览器的地址长度限制。

1.自己搭建一个本地的apache+php的web平台,这个不在本文的讨论范围。

2.在web服务器的根目录建立名为index.php的文件,写入如下内容:

<form method='get' action='index.php'>
$char='';
$len=1000;
$total_len=strlen('http://localhost/index.php?submit=submit&char=')+$len;
for($i=0;$i<$len;$i++){
  $char.='1';
}
echo $_REQUEST['char'];
echo "<p>Address length: ".$total_len;
echo "<p><input type='submit' name='submit' value='submit'>";
echo "<p><input type='hidden' name='char' value='".$char."'>";
</form>


3.访问http://localhost/index.php, 通过修改”$len=1000;”这行1000这个数字后点击submit测试各浏览器到地址栏极限。结果为$len所赋值加上”http://localhost/index.php”的46字节的和。

结果如下:
1. Firefox 3.0.3: 当$len 赋值为4053时出错,可见最长字长4098

2. IE7.0: 2083, 结果与官方说法一致

3. Opera 9.60: 4098 , Firefox3.0.3 相同

4. google chrome 0.2.149.30: 4098, 与Firefox3.0.3,Opera 9.60相同

可见Firefox, Opera, Chrome 虽然各自使用了不同的内核,至少在地址栏长度上有高度的默契。

另外,如果用POST方式传递数据,无论传递数据有多大,结果只会让浏览器死掉而不是报错。因为post的数据是放在header里传输的。可见POST传递数据无限制的传言基本上可以认为是正确的。

分享到:
评论
1 楼 lz12366 2011-11-30  
我测试的,IE7.0参数长度不止2083.。不知道你是怎么测试的。。

相关推荐

    解决URL长度的问题

    描述中提到了IE浏览器对URL长度的限制是2083个字符,这是一个典型的限制值,但并不适用于所有浏览器。 不同的浏览器对URL长度的限制是不一样的。例如,Chrome和Firefox的限制通常更为宽松,它们可以处理超过20000个...

    IE6/IE7/IE8兼容本地上传图片并预览源代码

    本篇文章将深入探讨一个关键问题——如何实现本地图片上传并预览的功能,并兼容IE6、IE7和IE8。这个功能对于现代浏览器来说是相当基础的,但在老版本的IE中,由于其内核和API的限制,实现起来并不简单。 首先,我们...

    获取IE浏览器当前URL

    但是,直接在URL中执行JS代码在实际应用中并不常见,因为它受限于URL的长度限制,且安全性较低。通常,我们倾向于通过其他方法,如`&lt;script&gt;`标签或者`eval()`函数在页面加载后执行代码。 3. **在IE中的特殊考虑**...

    xmlHttp ie6下不跨域还提示没有权限,ie8下不会有这错误

    此问题的标题指出“xmlHttp ie6下不跨域还提示没有权限,ie8下不会有这错误”,这涉及到XMLHttpRequest(通常称为XHR)对象在IE6与IE8之间处理跨域请求的差异,以及URL长度限制。 首先,让我们来理解什么是跨域。...

    易语言源码取IE地址栏.7z

    "易语言源码取IE地址栏"是一个关于如何通过易语言获取Internet Explorer(简称IE)浏览器地址栏URL的程序源代码。这个源代码可能包含一个或多个函数或者过程,用于读取和处理IE浏览器当前打开页面的URL信息。 在...

    URL 长度有限制吗?

    标题中的问题直指URL长度是否有限制,这是一个关于HTTP协议和网络请求常见限制的问题。描述中提到了GET和POST两种HTTP方法的区别,特别是在处理参数数量上的考量。标签明确指出是"URL长度限制",这部分内容则通过...

    【速查手册】IE与FF下JS的区别

    - `Function.prototype.call()`和`apply()`:IE6存在一些问题,可能导致在某些情况下不能正确调用。 了解并掌握这些差异,对于编写兼容性良好的JavaScript代码至关重要。实际开发中,可以使用库如jQuery、...

    关于URL最大长度限制的相关资料查证

    本文档将从多个方面详细查证和分析URL长度限制的相关知识,包括RFC标准、主流浏览器以及服务器端的限制情况,为以后的使用提供便利。 首先,我们需要明确的是,关于URL长度限制的说法确实存在一个误区。在RFC2616中...

    URL中编码URL特殊字符.docx

    浏览器如IE和Firefox会将非ASCII字符(如汉字)以UTF-8编码的形式插入URL。例如,汉字“春节”的UTF-8编码是`E6 98 A5 E8 8A 82`,在URL中显示为`%E6%98%A5%E8%8A%82`。 2. **查询字符串包含汉字**: 当URL包含...

    IE插件直接观察http协议执行细节捕获POST和GET方法.rar

    GET请求的参数通常显示在URL后面,是可见的,且对URL长度有限制,不适用于传输大量数据或敏感信息。 POST方法则用于向服务器提交数据,常用于表单提交、文件上传等场景。POST请求的数据被封装在请求体中,不会显示...

    易语言源码取IE浏览器地址栏内容.zip

    2. 一旦找到IE窗口,使用`GetWindowText`获取地址栏的文本长度。 3. 分配足够的内存存储地址栏的完整URL。 4. 再次调用`GetWindowText`,这次传递内存地址,将URL文本读取到内存中。 5. 最后,处理和显示获取到的URL...

    ie 历史记录文件格式分析

    每个IE用户配置文件下都会有一个或多个`Index.dat`文件,它们负责保存访问过的网站URL、访问时间戳、访问频率等信息。文件头部分包含了文件的基本属性和散列表的位置信息,是理解整个文件结构的基础。 - **文件大小...

    从url取得其在internet cache中的文件名

    其实,只要能播放(如视频音频文件),则播放后它就已经在你的IE缓存中了。 那么我们怎么从缓存中找到这个文件呢? 我写的这个代码,就是让你根据它的URL,来得到它的文件名, 然后去缓存中复制吧!

    读取IE保存的Cookie

    以上代码展示了如何在VB6中使用`InternetGetCookie`函数读取IE保存的Cookie。需要注意的是,由于这个函数依赖于`wininet.dll`库,因此在运行时必须确保该库已加载,否则可能引发运行时错误。此外,考虑到隐私和安全...

    WebTools插件让IE也可以多页浏览

    标题中的"WebTools插件"是指一款专为Internet Explorer(IE)设计的扩展程序,它引入了多页浏览的功能,使用户能够在同一IE窗口内同时打开和管理多个网页,类似于Netcaptor和MyIE等多页式浏览器。描述中提到,这款...

    取IE&Maxthon地址栏内容

    5. 调用`SendMessage`函数,向地址栏控件发送`WM_GETTEXT`消息,参数为地址栏句柄、消息ID、szURL的地址以及缓冲区长度。 6. szURL中现在就包含了地址栏的文本内容。 对于Maxthon浏览器,它的地址栏处理方式与IE略...

    易语言取IE&Maxthon地址栏内容

    接下来,`SendMessage`函数是另一个重要的API,它允许我们向目标窗口发送消息,如WM_GETTEXT,用于请求控件的当前文本,也就是地址栏中的URL。当我们有了地址栏的句柄后,可以发送WM_GETTEXT消息,浏览器将响应并...

    httpwatch-IE也可以查看AJAX请求数据的工具

    总的来说,`httpwatch`作为一个强大的工具,极大地简化了在IE环境下对AJAX请求的调试工作,为开发者提供了全面、直观的网络请求视图,从而提高了开发效率和问题解决速度。在实际项目中,善用这类工具将大大提高我们...

    IE浏览器在post提交时中文乱码的解决方法

    特别是IE浏览器(例如IE8)在post提交时出现中文乱码的现象,解决这一问题的方法和理解其背后的原理显得尤为重要。 首先,了解编码的基础概念是解决中文乱码问题的出发点。字符编码是一种对字符集中的字符进行编码...

Global site tag (gtag.js) - Google Analytics