Какова максимально возможная длина строки запроса?
Это зависит от браузера? Кроме того, разные веб-стеки имеют разные ограничения на количество данных, которые они могут получить по запросу?
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 текста.