Monitor404

Ошибка 429 Too Many Requests: слишком много запросов

Ошибка 429 Too Many Requests означает, что вы или ваше приложение отправили слишком много запросов за короткое время и сработал лимит. Достаточно подождать (время часто указано в заголовке Retry-After) и снизить частоту запросов.

Обновлено 11 октября 2026 г.

Что значит ошибка 429

Код 429 определён в RFC 6585 (раздел 4): пользователь отправил слишком много запросов за заданное время («ограничение частоты»). Ответ может содержать заголовок Retry-After: сколько секунд подождать или дату, после которой запрос можно повторить (формат описан в RFC 9110). Стандарт не обязывает сервер указывать, кого именно ограничили: клиента, IP, ключ API или всех.

http
HTTP/1.1 429 Too Many Requests
Retry-After: 30
Content-Type: application/json

{"error":"rate_limited","retry_after":30}

Почему возникает 429

  • превышен лимит запросов к API (в минуту, час или сутки по ключу);
  • парсер, скрипт или бот присылает запросы слишком часто;
  • общий IP-адрес (корпоративная сеть, мобильный оператор, VPN), где запросов много от разных людей;
  • защита от подбора пароля или WAF посчитала поведение подозрительным;
  • агрессивный обход сайта роботами, и сервер защищается;
  • в клиентском коде цикл или повторы запросов без паузы.

Что делать посетителю

  1. Подождите несколько минут и не обновляйте страницу: каждое обновление может продлить блокировку.
  2. Отключите VPN или прокси, которые используют общий IP.
  3. Закройте лишние вкладки и расширения, которые отправляют запросы в фоне.
  4. Если ошибка повторяется долго, сообщите владельцу сайта или в поддержку сервиса.

Что делать разработчику клиента

Если ваше приложение получает request failed with status code 429, не повторяйте запросы сразу. Соблюдайте Retry-After, если он есть, а иначе используйте экспоненциальную паузу с добавлением случайности (jitter) и ограничьте число повторов. Заодно уменьшите число запросов: кешируйте ответы, объединяйте запросы пакетами, используйте условные запросы (304).

Повтор с учётом Retry-After
async function fetchWithRetry(url, tries = 5) {
  for (let i = 0; i < tries; i++) {
    const res = await fetch(url);
    if (res.status !== 429) return res;
    const header = Number(res.headers.get("Retry-After"));
    const delay = header > 0 ? header * 1000 : 2 ** i * 1000 + Math.random() * 500;
    await new Promise((r) => setTimeout(r, delay));
  }
  throw new Error("Too many retries");
}

Что делать владельцу сайта или API

nginx

Лимит 10 запросов в секунду на IP с очередью 20
http {
    limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;

    server {
        location /api/ {
            limit_req zone=perip burst=20 nodelay;
            limit_req_status 429;
            add_header Retry-After 5 always;
            proxy_pass http://127.0.0.1:3000;
        }
    }
}

Без limit_req_status 429 nginx по умолчанию отвечает на превышение лимита кодом 503. В Apache штатного ограничения числа запросов нет (mod_ratelimit ограничивает скорость отдачи, а не число запросов), поэтому лимиты ставят на уровне прокси, WAF или приложения.

Приложение

Express и express-rate-limit
import rateLimit from "express-rate-limit";

app.use(
  "/api/",
  rateLimit({
    windowMs: 60_000, // окно: 1 минута
    limit: 100,       // запросов с одного IP за окно
    standardHeaders: true,
  }),
);

Не ограничивайте слишком жёстко реальных пользователей и проверенных роботов. Если за один IP сидит много людей, считайте лимиты по ключу или сессии, а не только по IP. Всегда добавляйте Retry-After и понятное тело ответа.

Что ограничивать и как

Ключ лимитаКогда подходитНедостаток
IP-адреспубличные страницы, защита от простых ботовза одним IP может быть много людей (NAT, офис, оператор)
Ключ API или токенплатные и закрытые APIнужна аутентификация до проверки лимита
Аккаунт или сессияформы, поиск, отправка писемботы быстро создают новые сессии
Маршрутдорогие операции: поиск, экспорт, входнужно подобрать лимит для каждого маршрута

429 отличается от 503: 429 говорит, что вы превысили свой лимит, а 503 — что сервер сам перегружен или недоступен. И от 403: 403 запрещает доступ вообще, а 429 лишь просит подождать. Обязательно логируйте срабатывания лимита: по ним видно, кто нагружает сервер.

429 и поисковые роботы

Google относит 429, как и 5xx, к сигналам замедлить обход: Googlebot снижает частоту запросов. Если сервер долго отвечает 429, URL могут выпасть из индекса, поэтому постоянный 429 для роботов опасен. Нагрузку от роботов лучше регулировать в Яндекс Вебмастере (скорость обхода) и корректировать при перегрузках временными 429 или 503, а не блокировать роботов кодами 401 и 403. Не включайте жёсткие лимиты на страницы, которые должен видеть поисковик, не проверив, что настоящие Googlebot и YandexBot туда проходят.

Как проверить

Статус страницы и заголовки (включая Retry-After) покажет проверка кода ответа. Для проверки лимита отправьте серию запросов: for i in $(seq 1 30); do curl -s -o /dev/null -w "%{http_code}\n" https://example.com/api/; done. Заметьте, что тест нагружает сервер, поэтому запускайте его только на своём ресурсе.

Частые вопросы

Что значит ошибка 429 Too Many Requests?

Сервер ограничил вас из-за слишком большого числа запросов за короткое время. Подождите и снизьте частоту запросов.

Сколько ждать при ошибке 429?

Смотрите заголовок Retry-After: в нём указаны секунды или дата повторной попытки. Если его нет, подождите несколько минут и делайте паузы между запросами.

Как исправить request failed with status code 429 в коде?

Уменьшите частоту запросов, добавьте кеш, соблюдайте Retry-After и используйте экспоненциальную паузу при повторах.

Влияет ли 429 на SEO?

Короткие всплески нормальны: Google просто замедляет обход. Постоянный 429 для роботов опасен: страницы могут выпасть из индекса.

Читайте также