Какова максимально возможная длина строки запроса?
-
03-07-2019 - |
Вопрос
Зависит ли это от браузера?Кроме того, имеют ли разные веб-стеки разные ограничения на объем данных, которые они могут получить из запроса?
Решение
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-адрес состоит из 64 тысяч символов, но может содержать более 100 тысяч символов.После этого никаких дальнейших испытаний проведено не было.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 (Сервер)
Ранние попытки измерить максимальную длину URL-адреса в веб-браузерах натыкались на ограничение длины URL-адреса сервера примерно в 4000 символов, после чего Apache выдавал ошибку "Слишком большой объект 413".Использовалась текущая обновленная сборка Apache, найденная в Red Hat Enterprise Linux 4.В официальной документации Apache упоминается только ограничение в 8 192 байта для отдельного поля в запросе.Информационный сервер Microsoft Internet Information Server (Сервер)
Ограничение по умолчанию составляет 16 384 символа (да, веб-сервер Microsoft принимает более длинные URL-адреса, чем веб-браузер Microsoft).Это можно настроить.Perl HTTP::Daemon (Сервер)
Будет работать до 8000 байт.Те, кто создает серверы веб-приложений с использованием модуля Perl HTTP::Daemon, столкнутся с ограничением в 16 384 байта на общий размер всех заголовков HTTP-запроса.Это не включает данные формы POST-method, загружаемые файлы и т.д., но это включает URL.На практике это приводило к ошибке 413, когда URL-адрес был значительно длиннее 8000 символов.Это ограничение может быть легко устранено.Найдите все вхождения 16x1024 в Daemon.pm и замените их на большее значение.Конечно, это увеличивает вашу подверженность атакам типа "отказ в обслуживании".
Другие советы
Хотя официально ограничений нет, во многих рекомендациях по настройке безопасности указывается, что для maxQueryStrings на сервере должно быть установлено максимальное ограничение в 1024 символа, а во всем URL-адресе, включая строку запроса, должно быть не более 2048 символов. Это сделано для того, чтобы предотвратить уязвимость Slow HTTP Request на веб-сервере и предотвратить медленные DDOS-атаки, которые обнаруживаются на сканере веб-приложений Qualys и других сканерах безопасности. Р>
Ознакомьтесь с приведенным ниже кодом для серверов Windows IIS с Web.config:
<security>
<requestFiltering>
<requestLimits maxQueryString="1024" maxUrl="2048">
<headerLimits>
<add header="Content-type" sizeLimit="100" />
</headerLimits>
</requestLimits>
</requestFiltering>
</security>
Различные веб-стеки поддерживают разные длины http-запросов. По своему опыту я знаю, что ранние стеки Safari поддерживали только 4000 символов и, следовательно, имели трудности с обработкой страниц ASP.net из-за состояния пользователя. Это даже для POST, поэтому вам придется проверить браузер и посмотреть, каков предел стека. Я думаю, что вы можете достичь предела даже в новых браузерах. Я не могу вспомнить, но один из них (я думаю, IE6) имел ограничение в 16 бит, 32 768 или что-то в этом роде.