Какой длины URL-адрес может занять Internet Explorer 9? - PullRequest
29 голосов
/ 15 сентября 2010

Прошлые версии Internet Explorer квакали на веб-адресах, длина которых превышает 2083 символа (см. http://support.microsoft.com/kb/208427).. Между тем, Firefox, Opera и Safari могут обрабатывать не менее 80000).

Версия 9 приносит много улучшений.Является ли длина URL одним из них?

Ответы [ 3 ]

18 голосов
/ 15 сентября 2010

Не самый точный ответ, но он выглядит как 2083 символа в адресной строке и 5165 символов при переходе по ссылке.

(Ни в коем случае не официально, просто вставил в тест URL с 41 000 символов)HTM-файл и используемый Javascript для запроса длины URL.)

Обновление:

Чтобы воспроизвести тест, создайте файл HTML с элементом привязки, атрибут HREF которого равен 6000персонажи длинные.Откройте файл в вашем браузере и нажмите на ссылку.Затем откройте консоль и проверьте window.location.href.length.

Следуя этой процедуре в IE9 сегодня, он сообщает длину в 5165 символов.Если я загружаю тот же URL-адрес вручную через адресную строку, он сообщает о 2083 символах.

Для чего стоит IE, похоже, обрезает URL-адрес перед отправкой запроса.Если я добавлю URL-адрес в 24 000 символов в атрибут HREF якоря, IE перейдет по ссылке, но на полученной странице отобразится длина URL-адреса 5165 символов.Следование по той же ссылке в Chrome приводит к ответу HTTP 414 от моего тестового сервера.

9 голосов
/ 10 мая 2011

Я получаю 5120 символов в URL для Internet Explorer 9.

Отнюдь не окончательный тест, но следующий пример демонстрирует быструю проверку длины URL атрибута href в теге привязки.

<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>
0 голосов
/ 19 июля 2016

Я написал этот тест, который сохраняет при добавлении '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>

I добавлены дополнительные ограничения для IISExpress applicationhost.config и web.config, настройка maxQueryStringLength="32768".

также Добавлено в конфигурацию

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

, который совсем не помог, Наконец решил использовать fiddler для удаления реферера из заголовка.

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
...