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

StackOverflow https://stackoverflow.com/questions/812925

  •  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 или что-то в этом роде.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top