Internet Explorer 9 可以占用多长时间的 URL?

Posted

技术标签:

【中文标题】Internet Explorer 9 可以占用多长时间的 URL?【英文标题】:How long of a URL can Internet Explorer 9 take? 【发布时间】:2011-04-12 20:54:41 【问题描述】:

过去版本的 Internet Explorer 在超过 2,083 个字符的网址上乱码(请参阅http://support.microsoft.com/kb/208427)。同时,Firefox、Opera 和 Safari 至少可以处理 80,000 个。

版本 9 带来了许多改进。 URL 长度是其中之一吗?

【问题讨论】:

属于 superuser.com @fahd 不,它不是 - 这是 Web 开发人员的基本信息 长度并不是最重要的......重要的是你如何使用它 - 服务器可能有一个小得多的限制来防止一些漏洞和未经授权的入侵。 @Archimedix 绝对。我并不是说 URL 长度超过几千字节是一件好事。但是知道 IE9 的限制在哪里是一个合理的问题。 IE9 有各种限制(地址栏、HREF、位置标头等)。 2083 个字符以下的 URL 可以在任何地方使用。可以解析和导航较长的 URL,但会导致各种问题(例如,结果不会被缓存),应尽可能避免。 【参考方案1】:

不是最准确的答案,但地址栏中的字符数为 2083 个字符,点击链接时为 5165 个字符。

(无论如何都不是官方的,只是将一个包含 41,000 个字符的 URL 插入到一个测试 HTM 文件中,并使用 javascript 来查询 URL 长度。)

更新:

要重现测试,请创建一个带有 HREF 属性为 6000 个字符长的锚元素的 html 文件。在浏览器中打开文件并单击链接。然后弹出控制台并检查window.location.href.length

按照今天在 IE9 中的这个过程,它报告长度为 5165 个字符。如果我通过地址栏手动加载相同的 URL,它会报告 2083 个字符。

对于它的价值,IE 似乎在发送请求之前截断了 URL。如果我在锚点的 HREF 属性中放置一个 24,000 个字符的 URL,IE 将跟随链接,但结果页面报告 5165 个字符的 url 长度。在 Chrome 中点击相同的链接会导致来自我的测试服务器的 HTTP 414 响应。

【讨论】:

我之前没有在链接中看到任何关于 5150 上限的文档,但它肯定会解释我遇到的一些问题,因为我的链接中的 URL > 2083 个字符正在工作,但在放入时失败地址栏。这只是经验性的 - 您是否只是尝试更大的 URL 直到它们失败?【参考方案2】:

我在 Internet Explorer 9 的网址中获得 5120 个字符。

绝不是一个明确的测试,但以下演示了如何快速检查锚标记中 href 属性的 url 长度。

<html>
    <head>
        <script type="text/javascript">
            function init() 
                var anchor = document.getElementById('anc');
                var valid = true;
                var url = 'http://google.com/?search=';
                var count = url.length;

                while(valid) 
                    url = url + '1';
                    anchor.href = url;
                    count++;
                    valid = anchor.href == url;

                    if(count > 100000) 
                        alert('Test reached 100,000, stopping...');
                        valid = false;
                    
                
                alert('Complete, count = ' + count);
            
        </script>
    </head>
    <body onload="init()">
        <a id="anc" href="http://google.com/">Test</a>
    </body>
</html>

【讨论】:

听起来很合理 - IE9 发行说明包括以下内容:“IE9 改进了对“书签”的支持——放宽了 URL 长度限制。”遗憾的是没有具体细节。重新测试 - 页内 HREF 的最大长度不一定与浏览器将传输的 URL 的最大长度相同(例如,通过地址栏)。需要通过提交和检查服务器日志来进行验证,以查看在什么时候发生截断(或错误?)。谁有 IE9 的确切信息?【参考方案3】:

I wrote this test that keeps 将'a' 添加到参数直到浏览器失败

C#部分:

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult ParamTest(string x)

    ViewBag.TestLength = 0;
    if (!string.IsNullOrEmpty(x))
    
        System.IO.File.WriteAllLines("c:/result.txt", 
                       new[] Request.UserAgent, x.Length.ToString());
        ViewBag.TestLength = x.Length + 1;
    

    return View();

查看:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<script type="text/javascript">
    $(function() 
        var text = "a";
        for (var i = 0; i < parseInt(@ViewBag.TestLength)-1; i++) 
            text += "a";
        

        document.location.href = "http://localhost:50766/Home/ParamTest?x=" + text;
    );
</script>

我added additional limits to IISExpressapplicationhost.configweb.config设置maxQueryStringLength="32768"

还有Added 进行配置

<headerLimits>
    <add header="Content-type" sizeLimit="32768" />
</headerLimits>

这根本没有帮助, 最后决定使用 fiddler 从 header 中删除 referer。

static function OnBeforeRequest(oSession: Session) 
if (oSession.url.Contains("localhost:50766")) 
        oSession.RequestHeaders.Remove("Referer");
        

做得很好。

在 IE9 上我得到了

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
4043

【讨论】:

以上是关于Internet Explorer 9 可以占用多长时间的 URL?的主要内容,如果未能解决你的问题,请参考以下文章

Internet Explorer 9 - 按比例调整图像大小

Internet Explorer 9 拖放 (DnD)

我可以强制 IE9 进入 Internet Explorer 9 标准模式吗

强制 Internet Explorer 9 使用 IE 9 模式

Internet Explorer 9 中的渐变

在 Internet Explorer 9 中使用 SVG 背景图像进行 CSS 2D 转换