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


559

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


Ви також можете перевірити це stackoverflow.com/questions/417142 / ...
Xinus

Це лише для GET запитів! Максимальний розмір запитів POST (з багаточастинними / формами-даними) тут невідомий!
петерх

Відповіді:


996

RFC 2616 (протокол передачі гіпертексту - HTTP / 1.1) стверджує, що немає межі довжини рядка запиту (розділ 3.2.1). RFC 3986 (Уніфікований ідентифікатор ресурсу - URI) також заявляє, що немає обмеження, але вказує, що ім'я хоста обмежено 255 символами через обмеження DNS (розділ 2.3.3).

Хоча технічні характеристики не визначають жодної максимальної довжини, веб-браузер та серверне програмне забезпечення встановлюють практичні обмеження. На основі досліджень, які, на жаль, більше не доступні на своєму первісному сайті (це призводить до тінистого, здавалося б, кредитного сайту), але які все ще можна знайти в Інтернет-архіві Boutell.com :

  • Microsoft Internet Explorer (браузер)
    Microsoft заявляє, що максимальна довжина URL-адреси в Internet Explorer становить 2 083 символів, у частині шляху URL-адреси не більше 2048 символів. Спроби використовувати URL-адреси довші, ніж це, викликали явне повідомлення про помилку в Internet Explorer.

  • Microsoft Edge (браузер)
    Мається на увазі, що обмеження становить близько 81578 символів. Див. Обмеження довжини URL-адреси Microsoft Edge

  • Chrome
    Він перестає відображати URL-адресу після 64-символьних символів, але може містити більше 100 тис. Символів. Подальше тестування не проводилося.

  • Firefox (браузер)
    Після 65536 символів, рядок розташування більше не відображає URL-адресу в Windows Firefox 1.5.x. Однак довші URL-адреси працюватимуть. Подальше тестування не проводилося після 100 000 символів.

  • Safari (браузер)
    Працює щонайменше 80 000 символів. Тестування не намагалося перевищувати це.

  • Опера (браузер)
    Працює щонайменше 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 байт. Ті, хто створює сервери веб-додатків з модулем HTTP :: Daemon Perl, зустрінуть обмеження в 16 384 байт для комбінованого розміру всіх заголовків запитів HTTP. Це не включає дані форми форми методу POST, завантаження файлів тощо, але воно включає URL-адресу. На практиці це призвело до помилки 413, коли URL значно перевищував 8000 символів. Це обмеження можна легко зняти. Шукайте всі випадки 16x1024 у Daemon.pm та замініть їх на більші значення. Звичайно, це збільшує ваш вплив на відмову від атак на обслуговування.


8
Чому ви не скажете номер версії також замість "Microsoft Internet Explorer (браузер)"?
LCJ

5
Здається, що обмеження IIS за замовчуванням у рядку запитів значно менше 16 384 символів - тут цитується як 2048: iis.net/configreference/system.webserver/security/…
JTech


Я думаю, ви створили тип, і обмеження DNS обговорюються в розділі "3.2.2. Хост" RFC3986, а не 2.2.3. "Виробники URI повинні використовувати імена, що відповідають синтаксису DNS, навіть коли використання DNS не очевидно, і повинні обмежувати ці імена довжиною не більше 255 символів."
Крейг Хікс

Причини java.lang.IllegalArgumentException: Request header is too largeна сервері додатків весняного завантаження tomcat.
Paramvir Singh Karwal

12

Хоча офіційно немає обмежень, визначених RFC 2616, у багатьох протоколах безпеки та рекомендаціях зазначено, що maxQueryStrings на сервері має бути встановлено максимальним обмеженням 1024. Хоча для всієї URL-адреси, включаючи рядок запитів, слід встановити максимум 2048 символів. Це робиться для запобігання повільної HTTP-запиту вразливості DDOS на веб-сервері. Зазвичай це проявляється вразливістю на сканері веб-додатків Qualys та інших сканерах безпеки.

Дивіться нижче приклад коду для серверів Windows IIS з Web.config:

<system.webServer>
<security>
    <requestFiltering>
        <requestLimits maxQueryString="1024" maxUrl="2048">
           <headerLimits>
              <add header="Content-type" sizeLimit="100" />
           </headerLimits>
        </requestLimits>
     </requestFiltering>
</security>
</system.webServer>

Це також працює на рівні сервера за допомогою machine.config.

Примітка. Обмеження рядка запиту та довжини URL-адреси може не повністю запобігти повільному запиту HTTP-атаки DDOS, але це можна зробити одним із кроків, щоб запобігти цьому.


2
І тепер у мене є причина, я можу сказати інженерам, що ми не приймемо список зі статусом UUID з 36 символів у queryParams запиту GET. Дякую!
Мордред

1

Різні веб-стеки підтримують різну довжину http-запитів. З досвіду я знаю, що ранні стеки Safari підтримували лише 4000 символів і, таким чином, виникали труднощі з обробкою сторінок ASP.net через ПОТРІБНИК. Це навіть для POST, тому вам доведеться перевірити браузер і побачити, що таке ліміт стека. Я думаю, що ви можете досягти межі навіть у нових браузерах. Я не можу пригадати, але один з них (IE6, я думаю) мав обмеження 16-бітового ліміту, 32,768 або щось подібне.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.