Какова максимально возможная длина строки запроса? - PullRequest
494 голосов
/ 01 мая 2009

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

Ответы [ 3 ]

914 голосов
/ 01 мая 2009

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

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

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

  • Microsoft Edge (браузер)
    Ограничение составляет около 81578 символов. См. Ограничение длины URL-адреса Microsoft Edge

  • Chrome
    Он останавливает отображение 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 Entity Too Large». Была использована текущая современная версия 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-метода, загрузкам файлов и т. Д., Но включает URL-адрес. На практике это привело к ошибке 413, когда URL-адрес был значительно длиннее, чем 8000 символов. Это ограничение можно легко снять. Найдите все вхождения 16x1024 в Daemon.pm и замените их на большее значение. Конечно, это увеличивает вашу подверженность атакам типа «отказ в обслуживании».

3 голосов
/ 12 января 2018

Хотя официально ограничений нет, во многих рекомендациях по настройке безопасности указывается, что для 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>
1 голос
/ 01 мая 2009

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

...