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

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

5 ответов

Решение

В 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

  • Хром
    Он перестает отображать 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 Интернет информационный сервер (сервер)
    Ограничение по умолчанию составляет 16 384 символа (да, веб-сервер Microsoft принимает более длинные URL-адреса, чем веб-браузер Microsoft). Это настраивается.

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

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

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

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

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

2048 ПЕРСОНАЖЕЙ

Хотя официально RFC 2616 не устанавливает ограничений , во многих протоколах и рекомендациях безопасности указано, что для maxQueryStrings на сервере должно быть установлено максимальное ограничение в 1024 символа . Хотя весь URL-адрес, включая строку запроса, должен иметь максимум 2048 символов.

URL-адрес считается слишком длинным, если он превышает 100 символов. Слишком длинный URL может вызывать как удобство использования и поиск проблем двигателя: Любые потенциальные выгоды вы можете иметь по ключевым словам в том числе будут размыты , так как это , например , как небольшой процент от общего URL текста.

Другие вопросы по тегам