30

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

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

4

3 回答 3

18

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

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

更新:

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

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

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

于 2010-09-15T19:43:56.853 回答
10

我在 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>
于 2011-05-10T14:50:18.617 回答
1

我写了这个测试,不断添加'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.configmaxQueryStringLength="32768"

添加到配置中

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

这根本没有帮助,最后决定使用提琴手从标题中删除引用者。

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
于 2016-07-19T15:31:01.020 回答