Многие разработчики считают, что максимальная длина URL в GET-запросе не должна превышать 2048 символов. Но так ли это на самом деле? Давайте разберёмся, откуда взялось это ограничение и насколько оно актуально в 2025 году.
Исторический контекст:
Изначально ограничение в 2083 символа действительно появилось в Internet Explorer (из них 2048 отводилось на строку запроса). Однако проблема была не только в IE:
- RFC 2616 (HTTP/1.1) не устанавливал жёсткого лимита, но на практике серверы и прокси-серверы (например, старые версии Apache, Nginx, Squid) использовали схожие ограничения (~2000-4000 символов) из-за:
- Буферизации заголовков.
- Проблем безопасности (WAF, IDS могли блокировать слишком длинные URL).
- Ограничений в логировании.
Современные браузеры (на апрель 2025):
Сегодня большинство браузеров поддерживают гораздо более длинные URL:
- Chrome, Opera, Edge (Chromium): ~32 000 символов.
- Firefox: до 65 000 (на практике до ~100 000, но возможны ошибки).
- Safari: до ~80 000 символов (но может обрезать раньше).
Важно: Старый Edge (EdgeHTML) действительно наследовал лимит IE (2083 символа), но новый Edge на Chromium использует те же ограничения, что и Chrome (~32К).
Серверные ограничения:
Даже если браузеры поддерживают длинные URL, серверы и промежуточное ПО могут их обрезать:
- Nginx: по умолчанию — 4096 символов (large_client_header_buffers).
- Apache (до 2.4): 8190 символов (LimitRequestLine).
- Cloudflare и CDN: часто обрезают URL длиннее 8–16К.
- Twitter API, Google API: многие публичные API имеют лимит ~4000 символов.
Почему всё равно стоит придерживаться ~2000 символов?
- Совместимость. Старые прокси, корпоративные фаерволы и устаревшие серверы могут отвергать длинные URL.
- Безопасность. Слишком длинные URL могут:
- Триггерить WAF (Web Application Firewall).
- Проблемы с логированием (обрезание в логах).
- SEO. Поисковики (Google, Яндекс) могут игнорировать URL длиннее 2000 символов.
- Отладка. Ссылки в 30 000 символов неудобны для разработчиков (например, при анализе логов).
Вывод: Технически современные браузеры поддерживают очень длинные URL, но на практике лучше придерживаться лимита ~2000 символов для GET-запросов.
Что делать, если нужно передать много данных?
- Для сложных фильтров используйте POST + body (даже если операция идемпотентная).
- Если GET обязателен — применяйте компрессию параметров (например, base64 + gzip для JSON-фильтров).
Такой подход обеспечит совместимость, безопасность и удобство поддержки кода.