Открыть сервис

HTTP 429 Too Many Requests

HTTP 429 Too Many Requests — это код состояния HTTP, который сервер возвращает клиенту в ответ на запрос, когда клиент превысил установленный лимит количества запросов за определённый промежуток времени (rate limiting). Код относится к классу 4xx (клиентские ошибки) и указывает на временное или постоянное ограничение доступа, наложенное сервером для защиты от перегрузки, злоупотреблений или атак.

История и стандартизация

Код 429 Too Many Requests был введён в спецификации HTTP/1.1 в 2012 году в документе RFC 6585 («Additional HTTP Status Codes»). До этого момента серверы, использующие ограничение запросов, могли возвращать код 503 (Service Unavailable) или 403 (Forbidden), что не отражало сути проблемы — клиентская сторона превысила лимит, а не серверная неисправность или отсутствие прав доступа. RFC 6585 уточнил семантику: код 429 однозначно сигнализирует о том, что клиент должен снизить частоту запросов.

В 2022 году код 429 был включён в обновлённую спецификацию HTTP Semantics (RFC 9110), заменившую RFC 7231. Стандарт сохранил определение: сервер должен возвращать 429, если клиент отправил слишком много запросов за заданный период времени.

Механизм работы

HTTP 429 является частью системы rate limiting (ограничения скорости запросов). Сервер устанавливает пороговые значения для каждого клиента (обычно по IP-адресу, API-ключу или идентификатору сессии). При превышении лимита сервер отклоняет запрос и возвращает код 429.

Заголовки ответа

Стандарт RFC 6585 рекомендует включать в ответ заголовок Retry-After, который указывает клиенту, через какое время можно повторить запрос. Значение может быть задано:

  • в секундах (например, Retry-After: 120);
  • в виде даты по HTTP-формату (например, Retry-After: Wed, 21 Oct 2025 07:28:00 GMT).

Дополнительно сервер может передавать заголовки, специфичные для конкретного API, например:

  • X-RateLimit-Limit — общее количество разрешённых запросов;
  • X-RateLimit-Remaining — сколько запросов осталось;
  • X-RateLimit-Reset — время сброса счётчика (в Unix timestamp).

Тело ответа

Тело ответа при 429 обычно содержит JSON или XML с пояснением причины. Например: ``json { "error": "Too Many Requests", "message": "Вы превысили лимит запросов. Повторите попытку через 60 секунд.", "retry_after": 60 } `` В некоторых реализациях тело может быть пустым или содержать HTML-страницу с сообщением об ошибке.

Причины возникновения

HTTP 429 возникает в следующих сценариях:

  1. Чрезмерная частота запросов от одного клиента — например, веб-скрапинг, DDoS-атаки, автоматизированные боты, не соблюдающие ограничения.
  2. Превышение квоты API — многие публичные API (Google Maps API, Twitter API, VK API) устанавливают лимиты на количество запросов в час или день. При превышении возвращается 429.
  3. Ошибки в клиентском коде — бесконечные циклы отправки запросов без задержек, некорректная обработка пагинации.
  4. Перегрузка сервера — в некоторых случаях сервер может временно ограничивать запросы всех клиентов для защиты от коллапса, возвращая 429 вместо 503.
  5. Атаки типа «перебор паролей» — системы аутентификации часто блокируют IP-адреса, с которых поступает более 3–5 неудачных попыток входа в минуту.

Обработка на стороне клиента

Клиент (браузер, приложение, скрипт) должен корректно обрабатывать код 429:

  • Проверять заголовок Retry-After и приостанавливать запросы на указанное время.
  • Реализовывать экспоненциальную задержку (exponential backoff) — при повторных 429 увеличивать паузу между попытками (например, 1 сек, 2 сек, 4 сек, 8 сек).
  • Логировать ошибки для анализа и исправления клиентского кода.
  • Избегать повторных запросов без задержки — это может привести к блокировке IP-адреса на более длительный срок.

Примеры использования

Веб-серверы

  • Nginx — модуль ngx_http_limit_req_module позволяет настроить ограничение запросов. При превышении возвращается 429 (или 503, в зависимости от конфигурации).
  • Apache — модуль mod_ratelimit или сторонние решения (например, mod_evasive) могут генерировать 429.
  • Cloudflare — сервис защиты от DDoS-атак возвращает 429 при превышении лимитов (например, 100 запросов за 10 секунд с одного IP).

API-сервисы

  • VK API (входит в структуру Meta — организация признана экстремистской и запрещена в РФ) — при превышении 3 запросов в секунду возвращает код 429 с заголовком Retry-After.
  • GitHub API — лимит 5000 запросов в час для аутентифицированных пользователей; при превышении возвращается 429.
  • Яндекс.API — для большинства сервисов (Яндекс.Карты, Яндекс.Переводчик) установлены лимиты; при превышении возвращается 429 с сообщением «Too many requests per second».

Отличие от других кодов

КодНазваниеСмысл
429Too Many RequestsКлиент превысил лимит запросов
503Service UnavailableСервер временно недоступен из-за перегрузки или обслуживания
403ForbiddenДоступ запрещён (например, из-за блокировки IP)
429

Ключевое отличие: 429 указывает на то, что проблема именно в частоте запросов, а не в отсутствии прав (403) или неисправности сервера (503).

Критика и ограничения

  • Отсутствие единого стандарта заголовков — хотя RFC 6585 рекомендует Retry-After, многие API используют собственные заголовки (X-RateLimit-*), что усложняет универсальную обработку.
  • Непрозрачность лимитов — сервер может не сообщать клиенту точные пороги, что затрудняет планирование запросов.
  • Риск ложных срабатываний — при распределённой архитектуре (например, несколько серверов за балансировщиком) лимиты могут считаться некорректно, блокируя легитимных пользователей.
  • Злоупотребление — некоторые сервисы используют 429 как инструмент ограничения конкуренции (например, блокировка API для определённых клиентов), что может нарушать антимонопольное законодательство.

Интересные факты

  • Код 429 является одним из немногих кодов HTTP, который явно описывает поведение клиента, а не сервера.
  • В некоторых реализациях (например, в Twitter API) при превышении лимита возвращается не 429, а 420 (Enhance Your Calm) — нестандартный код, отсылающий к сленгу «успокойся».
  • В России крупные интернет-компании (Яндекс, VK, Сбер) активно используют rate limiting для защиты от ботов, особенно в контексте борьбы с DDoS-атаками и парсингом данных.

Источники

  1. RFC 6585 — Additional HTTP Status Codes (2012)
  2. RFC 9110 — HTTP Semantics (2022)
  3. Документация Nginx — модуль ngx_http_limit_req_module
  4. Документация Cloudflare — Rate Limiting
  5. Документация VK API — Ограничения запросов (VK — входит в структуру Meta, признанной экстремистской и запрещённой в РФ)
  6. Документация GitHub API — Rate Limiting
  7. Статья «HTTP 429 Too Many Requests» на MDN Web Docs

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →