Ошибка 429 Too Many Requests: слишком много запросов
Ошибка 429 Too Many Requests означает, что вы или ваше приложение отправили слишком много запросов за короткое время и сработал лимит. Достаточно подождать (время часто указано в заголовке Retry-After) и снизить частоту запросов.
Обновлено 11 октября 2026 г.
Что значит ошибка 429
Код 429 определён в RFC 6585 (раздел 4): пользователь отправил слишком много запросов за заданное время («ограничение частоты»). Ответ может содержать заголовок Retry-After: сколько секунд подождать или дату, после которой запрос можно повторить (формат описан в RFC 9110). Стандарт не обязывает сервер указывать, кого именно ограничили: клиента, IP, ключ API или всех.
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 посчитала поведение подозрительным;
- агрессивный обход сайта роботами, и сервер защищается;
- в клиентском коде цикл или повторы запросов без паузы.
Что делать посетителю
- Подождите несколько минут и не обновляйте страницу: каждое обновление может продлить блокировку.
- Отключите VPN или прокси, которые используют общий IP.
- Закройте лишние вкладки и расширения, которые отправляют запросы в фоне.
- Если ошибка повторяется долго, сообщите владельцу сайта или в поддержку сервиса.
Что делать разработчику клиента
Если ваше приложение получает request failed with status code 429, не повторяйте запросы сразу. Соблюдайте Retry-After, если он есть, а иначе используйте экспоненциальную паузу с добавлением случайности (jitter) и ограничьте число повторов. Заодно уменьшите число запросов: кешируйте ответы, объединяйте запросы пакетами, используйте условные запросы (304).
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
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 или приложения.
Приложение
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 для роботов опасен: страницы могут выпасть из индекса.