Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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 упоминает только 8192 байтов в отдельном поле в запросе.

  • Microsoft Internet Information Server (сервер)
    Предел по умолчанию - 16 384 символа (да, веб-сервер Microsoft принимает более длинные URL-адреса, чем веб-браузер Microsoft). Это настраивается.

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

Если вы хотите быть хорошо зарекомендовавшим себя в Google, вы должны знать о том, что Google индексирует первые 7 слов в любом URL-адресе после имени домена. К сожалению, длинные URL-адреса могут быть оштрафованы. В качестве обходного пути вы можете использовать услугу типа tinyurl.com или самостоятельно реализовать схему сокращения. Например, многие доски PHP используют такой поиск:

  • типы пользователей в форме поиска, postback to search.php
  • перенаправить на search.php? searchid = {guid}//обратите внимание, что это запрос на получение. guid указывает все параметры поиска, которые пользователь ввел. но теперь ссылку на результаты поиска можно разделить и опубликовать.