Какова максимально возможная длина строки запроса?
зависит ли это от браузера? Кроме того, у разных веб-стеков есть разные ограничения на то, сколько данных они могут получить из запроса?
4 ответа:
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 после 64K символов, но может служить более 100k символов. Больше никаких испытаний не проводилось.В 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 (Server)
Ранние попытки измерить максимальную длину URL-адреса в веб-браузерах столкнулись с ограничением длины URL-адреса сервера примерно 4000 символов, после чего Apache выдает ошибку "413 Entity Too Large". Была использована текущая обновленная сборка Apache, найденная в Red Hat Enterprise Linux 4. В официальной документации Apache упоминается только 8,192-байтовый предел для отдельного поля в a запрос.Microsoft Internet Information Server (Server)
Ограничение по умолчанию составляет 16 384 символа (да, веб-сервер Microsoft принимает более длинные URL-адреса, чем веб-браузер Microsoft). Это настраивается.Perl HTTP::Daemon (Сервер)
До 8000 байт будет работать. Те, кто строит серверы веб-приложений с Perl HTTP::Daemon модуль столкнется с ограничением 16,384 байт на общий размер всех заголовков HTTP-запроса. Это не включает в себя данные формы после метода, загрузку файлов и т. д., но он включает URL-адрес. На практике это привело к ошибке 413, когда URL-адрес был значительно длиннее 8 000 символов. Это ограничение можно легко снять. Ищите все вхождения 16x1024 в Daemon.pm и замените их на большее значение. Конечно, это увеличивает вашу подверженность атакам типа отказ в обслуживании.
Я предполагаю, что вы имеете в виду максимальную длину для строки uri. этой может помочь.
Как правило, как только URI становятся нечитаемыми, потому что они слишком длинные, пришло время использовать запрос POST вместо этого.
различные веб-стеки поддерживают различные длины http-запросов. Я знаю по опыту, что ранние стеки Safari поддерживали только 4000 символов и поэтому имели трудности с обработкой ASP.net страницы из-за состояния пользователя. Это даже для POST, поэтому вам нужно будет проверить браузер и посмотреть, что такое ограничение стека. Я думаю, что вы можете достичь предела даже на новых браузерах. Я не могу вспомнить, но один из них (IE6, я думаю) имел предел 16-битного предела, 32 768 или что-то.
хотя официально ограничений нет, во многих рекомендациях по настройке безопасности указано, что maxQueryStrings на сервере должен быть установлен максимальный предел символов 1024, а весь url-адрес, включая строку запроса, должен быть установлен на максимум 2048 символов. Это делается для предотвращения уязвимости медленного HTTP-запроса на веб-сервере для предотвращения медленных DDOS-атак.