Какова максимально возможная длина строки запроса?


зависит ли это от браузера? Кроме того, у разных веб-стеков есть разные ограничения на то, сколько данных они могут получить из запроса?

4 458

4 ответа:

RFC 2616 (протокол передачи гипертекста - HTTP/1.1) указывает, что длина строки запроса не ограничена (раздел 3.2.1). RFC 3986 также указывает, что нет ограничения, но указывает, что имя хоста ограничено 255 символами из-за ограничений DNS (раздел 2.3.3).

пока спецификации не определяют никакую максимальную длину, практически ограничения наведены програмным обеспечением браузера и сервера паутины. На основании исследований, найденных по адресу Boutell.com:

  • Microsoft Internet Explorer (Браузер)
    Корпорация Майкрософт заявляет, что максимальная длина URL-адреса в Internet Explorer составляет 2083 символа, при этом в части пути URL-адреса не более 2048 символов. Попытки использовать URL-адреса дольше, чем это привело к появлению четкого сообщения об ошибке в Internet Explorer.

  • Microsoft Edge (Браузер)
    Предел появляется, чтобы быть вокруг 81578 персонажей. Смотрите ограничение длины URL Microsoft Edge

  • хром
    Он останавливается показывать URL после 64K символов, но может служить более 100k символов. Больше никаких испытаний не проводилось.

  • В Firefox (Браузер)
    После 65 536 символов строка расположения больше не отображает URL-адрес в Windows Firefox 1.5.x. однако более длинные URL-адреса будут работа. После 100 000 символов дальнейшее тестирование не проводилось.

  • Safari (Браузер)
    По крайней мере, 80 000 символов будет работать. Тестирование не было опробовано за пределами этого.

  • Opera (Браузер)
    По крайней мере, 190 000 символов будет работать. Остановлено тестирование после 190 000 символов. Opera 9 для Windows продолжает отображать полностью редактируемый, копируемый и вставляемый URL в строке местоположения даже при 190 000 письмена.

  • Apache (Server)
    Ранние попытки измерить максимальную длину URL-адреса в веб-браузерах столкнулись с ограничением длины URL-адреса сервера примерно 4000 символов, после чего Apache выдает ошибку "413 Entity Too Large". Была использована текущая обновленная сборка Apache, найденная в Red Hat Enterprise Linux 4. В официальной документации Apache упоминается только 8,192-байтовый предел для отдельного поля в a запрос.

  • Microsoft Internet Information Server (Server)
    Ограничение по умолчанию составляет 16 384 символа (да, веб-сервер Microsoft принимает более длинные URL-адреса, чем веб-браузер Microsoft). Это настраивается.

  • Perl HTTP::Daemon (Сервер)
    До 8000 байт будет работать. Те, кто строит серверы веб-приложений с Perl HTTP::Daemon модуль столкнется с ограничением 16,384 байт на общий размер всех заголовков HTTP-запроса. Это не включает в себя данные формы после метода, загрузку файлов и т. д., но он включает URL-адрес. На практике это привело к ошибке 413, когда URL-адрес был значительно длиннее 8 000 символов. Это ограничение можно легко снять. Ищите все вхождения 16x1024 в Daemon.pm и замените их на большее значение. Конечно, это увеличивает вашу подверженность атакам типа отказ в обслуживании.

Я предполагаю, что вы имеете в виду максимальную длину для строки uri. этой может помочь.

Как правило, как только URI становятся нечитаемыми, потому что они слишком длинные, пришло время использовать запрос POST вместо этого.

различные веб-стеки поддерживают различные длины http-запросов. Я знаю по опыту, что ранние стеки Safari поддерживали только 4000 символов и поэтому имели трудности с обработкой ASP.net страницы из-за состояния пользователя. Это даже для POST, поэтому вам нужно будет проверить браузер и посмотреть, что такое ограничение стека. Я думаю, что вы можете достичь предела даже на новых браузерах. Я не могу вспомнить, но один из них (IE6, я думаю) имел предел 16-битного предела, 32 768 или что-то.

хотя официально ограничений нет, во многих рекомендациях по настройке безопасности указано, что maxQueryStrings на сервере должен быть установлен максимальный предел символов 1024, а весь url-адрес, включая строку запроса, должен быть установлен на максимум 2048 символов. Это делается для предотвращения уязвимости медленного HTTP-запроса на веб-сервере для предотвращения медленных DDOS-атак.