#Что означает ошибка
429
Код 429 Too Many Requests сообщает: клиент отправил слишком много запросов за короткое время, и сервер временно отказывается их обрабатывать. Это не поломка, а защитный механизм — ограничение частоты запросов (rate limit), которое есть у большинства API, поисковых систем, CDN и защит от ботов.
Для обычного пользователя 429 чаще всего встречается при частом обновлении страницы, использовании расширений, автоматически запрашивающих данные, или VPN, на котором много людей делят один IP. Для разработчика — при интеграции с чужим API без учёта лимитов.
Сократите частоту запросов, используйте Retry-After и кэш.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Лимит APIПревышен. | Проявляется как «429» или близкий по смыслу сбой. | Замедлитесь. |
| Нет кэшаЛишние запросы. | Проявляется как «429» или близкий по смыслу сбой. | Кэшируйте. |
| Много клиентовIP. | Проявляется как «429» или близкий по смыслу сбой. | Очередь. |
| БотЗащита. | Проявляется как «429» или близкий по смыслу сбой. | Проверьте. |
#Пошаговое решение
- Прочитайте Retry-AfterРазработчику API: откройте терминал на своём компьютере и выполните
curl -i https://api.example.com/resource, заменив адрес на ваш разрешённый endpoint. Найдите статус HTTP 429 и заголовокRetry-After; он может быть числом секунд или датой. Не повторяйте запрос до указанного срока. Дополнительные заголовки лимитов (RateLimit-*,X-RateLimit-*) зависят от API и могут отсутствовать. - Добавьте паузыВ клиенте API реализуйте обработку 429: если есть
Retry-After, дождитесь указанного времени; иначе примените ограниченные повторы с нарастающей задержкой и случайной добавкой, с верхним пределом попыток. Для запросов, создающих или оплачивающих ресурсы, используйте предусмотренные API ключи идемпотентности, чтобы не создать дубли. Не отправляйте запросы в бесконечном цикле и не пытайтесь обойти ограничения чужого сервиса. - Кэшируйте ответыТолько при разрешении API и соблюдении правил обработки данных: сохраняйте ответы на срок, разрешённый поставщиком, чтобы не повторять одинаковые GET-запросы. Если API поддерживает
ETag, отправляйтеIf-None-Matchс ранее полученным значением. Уменьшите параллельность и объединяйте запросы, только если это предусмотрено документацией. Успех — меньше ответов 429 при сохранении корректности данных.
#Как работает лимит
Сервер считает запросы с вашего IP-адреса, ключа API или токена в окне времени (например, 60 запросов в минуту). При превышении он возвращает 429 и, как правило, заголовок Retry-After с числом секунд ожидания, а также X-RateLimit-Remaining и X-RateLimit-Reset с остатком лимита.
#Рекомендации для пользователей
Подождите минуту-две и не обновляйте страницу повторно: каждая попытка может продлевать блокировку. Отключите расширения, массово обращающиеся к сайту. Если вы за общим NAT или VPN, смените сервер, так как лимит делят все, кто выходит через тот же адрес.
#Рекомендации для разработчиков
Реализуйте экспоненциальную задержку с джиттером (1, 2, 4, 8 секунд плюс случайная добавка), кешируйте ответы, объединяйте мелкие запросы в пакетные и читайте документацию API про лимиты. На своей стороне ограничивайте нагрузку через nginx (limit_req) и отдавайте Retry-After, чтобы клиенты понимали, когда повторить.
curl -I https://api.example.com/resourcelimit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;limit_req zone=api burst=20 nodelay;Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.