Статус 429 (Too Many Requests) — явный сигнал rate limit. Он может приходить мгновенно на пике или «подтекать» через рост времени ответа и частые редиректы на CAPTCHA. 403 (Forbidden) чаще указывает на срабатывание сигнатур антибота, несоответствие гео/ASN, «грязный» IP из blacklist, некорректные заголовки или подозрительную поведенческую модель. В обоих кейсах стратегия ротации должна учитывать контекст: тип ресурса (реклама, маркетплейс, агрегатор), чувствительность к авторизации, риск привязки сессии к IP и текущую нагрузку пула.
Сердце системы — конечный автомат (state machine), где состояния описывают «здоровье» сессии: OK, WARN, LIMIT, BLOCKED, DEGRADED. Переходы выполняются на основе метрик: частота 429/403 за окно, доля 5xx, рост TTFB и P95, всплески TLS handshake time, доля CAPTCHA/JavaScript challenge, частота TCP RST/timeout. Простой, но эффективный порог: если доля 429 за скользящее окно 2–5 минут превышает X% (например, 3–5% для публичных страниц и 1–2% для платежных/личных кабинетов), включаем экспоненциальный бэкофф с джиттером и мягкую ротацию IP в рамках того же ASN. Если появляется 403 с подтвержденной валидностью cookie и нормальным user‑agent, усиливаем ротацию: смена IP + смена подсети/ASN/гео, обновление fingerprints (accept‑language, viewport, time zone), проверка заголовков (sec‑ch‑ua, dnt, upgrade‑insecurerequests).
Ключевая тонкость: 403 не всегда равен «ban per account». Нередко это реакция на несогласованность: авторизация выдана одному IP, а запросы летят с нескольких; или «грязные» заголовки proxy‑цепочки. Поэтому перед жесткой ротацией делаем быстрый sanity‑check: сверяем домен, токен, свежесть cookie, стабильность TLS session ticket и SNI, совпадение IPv4/IPv6 предпочтений. Если 403 приходит после входа в кабинет — сохраняем stickiness, переводим поток в режим «тихий час» (низкий QPS) и синхронизируем fingerprint. Только при повторном 403 или серии hard‑сигналов (suspicious activity page, фрод‑коды) — разрываем сессию и уходим в новый IP.
Ротацию важно сочетать с бэкоффом, иначе вы будете «стрелять» себе в ногу. Экспоненциальный бэкофф с полным джиттером (full jitter) смещает пучности запросов и снижает корреляцию с чужим трафиком из того же пула IP. Для 429: первый повтор через 1–2 секунды, потом 2–4, 4–8, 8–16 с жесткой крышкой, например, 32 секунды, после чего — смена IP или пауза до 2–5 минут. Для 403: обычно не ретраим на том же IP, а либо деградируем функциональность (переходим на публичную страницу), либо меняем IP+ASN и меняем поведенческую стратегию (меньше параллелизма, больше задержек «как у человека», имитация скролла). Важно вести «карточку сайта»: оптимальные окна, чувствительность к гео, запросы‑триггеры, лимиты на QPS по эндпоинтам.
Мобильные прокси дают бонус — высокий доверительный уровень из‑за NAT‑пула операторов связи и естественной динамики IP‑адресов. Но это не панацея: агрессивная параллелизация и «плоский» трафик (одинаковые пути, одинаковые заголовки) быстро ставят вас под наблюдение. Используйте session‑порты (sticky sessions) с TTL: например, 10–30 минут на один аккаунт/сценарий. Если видите микропризнаки лимита (рост латентности, одиночные 429, короткие редиректы на challenge) — на шаг уменьшайте QPS и увеличивайте паузы между кликами/просмотрами карточек товаров.
- Вводные пороги: 1–2% 403 или 3–5% 429 за 2–5 минут — переключаемся в режим WARN, снижаем QPS, включаем бэкофф.
- Устойчивые сигналы (повторные 403, CAPTCHA‑луп) — жесткая ротация: смена IP, подсети/ASN и корректировка fingerprint.
- Падение TTFB на 40–60% без роста ошибок — вероятен «soft throttling»: stickiness сохраняем, но дробим запросы во времени.