Какие практические ограничения длины URL существуют для GET-запросов?

«Какие практические ограничения длины URL существуют для GET-запросов?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Спецификация HTTP не определяет жёсткого лимита, но ограничения накладываются браузерами, серверами и промежуточным ПО (прокси).

Типичные ограничения:

  • Браузеры: ~2000–8000 символов (Chrome ~32КБ, Firefox ~64КБ, IE ~2048).
  • Веб-серверы:
    • Apache (LimitRequestLine): по умолчанию 8190 байт (~8КБ).
    • Nginx (large_client_header_buffers): по умолчанию 4КБ или 8КБ.
  • Прокси-серверы: часто имеют лимит в 4КБ.

Рекомендация: Для передачи больших объёмов данных (например, JSON-тела) используйте метод POST (или PUT/PATCH), а не GET.

Пример обработки ошибки 414 (URI Too Long) в Java:

HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
int responseCode = connection.getResponseCode();
if (responseCode == 414) {
    // URL превысил допустимую длину на сервере
}