Ответ
Спецификация HTTP не определяет жёсткого лимита, но ограничения накладываются браузерами, серверами и промежуточным ПО (прокси).
Типичные ограничения:
- Браузеры: ~2000–8000 символов (Chrome ~32КБ, Firefox ~64КБ, IE ~2048).
- Веб-серверы:
- Apache (
LimitRequestLine): по умолчанию 8190 байт (~8КБ). - Nginx (
large_client_header_buffers): по умолчанию 4КБ или 8КБ.
- Apache (
- Прокси-серверы: часто имеют лимит в 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КБ.
- Apache (
- Прокси-серверы: Эти вообще, блядь, самые вредные — часто лимит ставят в 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-й и будешь сидеть, чесать репу.