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

Ответ

Спецификация 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 превысил допустимую длину на сервере
}

Ответ 18+ 🔞

Ах ты ж ёпта, ну вот опять этот вечный вопрос про длину URL! Слушай, тут такая история, как с колбасой в магазине — вроде стандарта нет, но на практике тебе её отрежут ровно столько, сколько позволит весы продавца или твоя сковородка.

По факту, в самой бумажке про HTTP (RFC) чёткой цифры нет, типа "хуй с горы, пиши сколько влезет". Но на практике тебя обрежут все, кому не лень: браузер, сервер и куча промежуточного говна вроде прокси.

Где и как тебя обрежут:

  • Браузеры: Тут вообще цирк. Хром может пропустить ~32КБ, лиса — ~64КБ, а этот старый пердун IE — всего-то пару килобайт (~2048 символов). Представляешь? Ебушки-воробушки!
  • Веб-серверы:
    • Apache (LimitRequestLine): По дефолту даёт тебе 8190 байт (~8КБ). Больше — и ты летишь в ошибку.
    • Nginx (large_client_header_buffers): Тоже скряга, обычно 4 или 8КБ.
  • Прокси-серверы: Эти вообще, блядь, самые вредные — часто лимит ставят в 4КБ и нихуя не сообщают.

Так что делать, чувак? Да не выёбывайся! Если тебе надо передать овердохуища данных (типа жирного JSON), не пихай это в GET-параметры, как последний распиздяй. Используй POST (или PUT/PATCH), там тело запроса — твоё царство, туда хоть войну и мир засунь.

Вот, смотри, как на Java отловить момент, когда серверу твой URL показался слишком длинным (ошибка 414):

HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
int responseCode = connection.getResponseCode();
if (responseCode == 414) {
    // Сервер послал тебя нахуй, потому что URL превысил лимит
}

Короче, запомни: GET — для коротких запросов, POST — для всего остального. Не усложняй себе жизнь, а то получишь 414-й и будешь сидеть, чесать репу.