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

过去的Internet Explorer版本在长度超过2,083个字符的网址上发出呻吟声(请参阅http://support.microsoft.com/kb/208427)。 同时,Firefox,Opera和Safari至少可以处理8万个。

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


不是最准确的答案,但它看起来像地址栏中的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将跟随链接,但生成的页面报告的URL长度为5165个字符。 Chrome浏览器中的相同链接导致来自我的测试服务器的HTTP 414响应。


我在Internet Explorer 9的url中获得了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>

我编写了这个测试,在浏览器失败之前不断为参数添加'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>

我为IISExpress applicationhost.configweb.config设置了maxQueryStringLength="32768"添加了额外限制。

也添加到配置

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

根本没有任何帮助,最后决定使用fiddler从头文件中删除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
链接地址: http://www.djcxy.com/p/1113.html

上一篇: How long of a URL can Internet Explorer 9 take?

下一篇: I ran into a merge conflict. How can I abort the merge?