Ошибка 429 Too Many Requests: что это за ошибка и как ее исправить

Контент-маркетолог
Стаж 15 лет

Ошибка HTTP 429 Too Many Requests (от англ. «Слишком много запросов») — это код сервера. Она возвращается, когда сервер получает слишком много запросов с одного IP-адреса в течение определенного периода времени. Самый частый сценарий появления случается, когда сайт или другое веб-приложение получает большой объем трафика, и сервер не может справиться с такой нагрузкой. Этот код ответа предназначен для предотвращения злоупотреблений и защиты сервера от перегрузки слишком большим количеством запросов.

Простыми словами, ошибка HTTP 429 Too Many Requests — код состояния при перегруженном сервере.

Что вызывает ошибку 429

Существует несколько факторов, которые могут вызвать ошибку HTTP 429 Too Many Requests.

Слишком большой объем трафика

Когда веб-приложение испытывает внезапный всплеск трафика, сервер может быть перегружен. Как правило, временно. Это и приводит к появлению ответа 429.

Краулеры ПС и сторонних сервисов (например, платформ веб-аналитики)

Боты-обходчики пытаются обойти все страницы сайта, вот почему они быстро расходуют допустимые лимиты сервера по числу обращений, в результате чего сервер возвращает 429 код. Агрессивные методы сканирования (очистка или непрерывный интеллектуальный анализ данных), также могут привести к появлению такого ответа.

Использование инструмента веб-скрапинга

Это не только сам скрапинг (технология получения данных веб-страниц при помощи экстракции информации), но и агрессивный парсинг данных, любые иные автоматизированные инструменты для доступа к серверу. Они могут отправлять большое количество запросов к серверу за короткий промежуток времени.

Отправка формы несколько раз подряд

Если вы отправляете форму на странице несколько раз подряд, сервер может расценить это как попытку взлома или намеренного вредоносного поведения и заблокировать доступ к сайту с вашего IP.

Плохо настроенные приложения

Некорректные конфигурации веб-приложений могут привести к тому, что сервер вернет ошибку 429, особенно если такие приложения не предназначены для обработки большого трафика или гигантского количества запросов.

Как исправить ошибку 429

Существует несколько способов исправить HTTP 429. Для удобства мы разделили их на вебмастерские и пользовательские.

Для вебмастера

  • Внедрите ограничение скорости. Оно предполагает ограничение количества запросов, которые могут быть сделаны с одного IP-адреса в течение определенного периода времени. Это лучшее решение, чтобы помочь предотвратить перегрузку сервера и снизить вероятность кода ответа 429.
  • Ограничение скорости — это техника, которая используется для контроля количества запросов, которые клиент может сделать к серверу за определенный промежуток времени. Цель: предотвратить перегрузки сервера, защитить сервер от злоупотребления.

  • Используйте средство балансировки нагрузки. Оно поможет распределять трафик между несколькими серверами, снижая нагрузку на отдельные серверы и уменьшая вероятность код ответа 429.
  • Внедрите кэширование. Оно сократит количество запросов, отправляемых на сервер, уменьшая нагрузку на него и вероятность этого сбоя.
  • Оптимизируйте конфигурации сервера. Поможет повысить производительность сервера и снизить вероятность появления 429-о кода.
  • Используйте дросселирующие заголовки типа Retry-After: они указывают, когда запросы могут быть возобновлены. Если реализован метод .wait() и запрос дросселируется, в ответ будет включен заголовок Retry-After. Приостановите активность и повторите попытку в соответствии с рекомендацией.
  • Реализуйте экспоненциальный откат. Самый обычный способ ЭО — это когда вы пытаетесь что-то сделать, а потом ждете немного времени перед следующей попыткой. После каждой попытки вы ждете все больше и больше времени. Это как играть в игру, где каждый раз, когда ты ошибаешься, тебе нужно ждать дольше, чтобы начать снова. Это называется экспоненциальный рост. При возникновении 429-о ответа разработчику нужно экспоненциально увеличивать время ожидания перед повторной попыткой: 1 с, 2 с, 4 с и так далее. Такой подход позволит распределить количество попыток во времени.
  • Ограничивайте скорости потока запросов. Для этого почитайте про методы ограничения скорости. Самый очевидный пример: алгоритм маркерной корзины (он же — алгоритм текущего ведра). Использование этого подхода гарантирует, что веб-приложение останется в рамках согласованных ограничений. Ну и не допускайте ситуации, когда речь идет о тысячах запросов в минуту.
  • Применяйте кэширование ответов. Можно кэшировать результаты запросов к БД, к любым вычислениям, которые требуют много времени. Например, запросы к интерфейсам программирования приложений, ответы на них, а также файлы, которые используются на веб-страницах (разметка в HTML, JS, CSS, сами изображения).
  • Кэширование ответов поможет снизить нагрузку от повторных запросов к одним и тем же данным. Свежие данные нужно получать только по мере необходимости.

  • Настройте API нормально. Они не должны отправлять бесконечные запросы ежедневно. Если настроить программный интерфейс приложения не удается, то лучше быстрее свяжитесь с его поставщиком или разработчиков. Превышение лимитов — это увеличение квот или изменение правил дросселирования.
  • Самопереполнение и направленный шторм ложных TCP-запросов. Проверьте, нет ли шторма запросов. Отладочный код, неправильная логика масштабируемости — это лишь две из десятка возможных того, что приложение само себя переполняет. Обязательно устраните внутренние проблемы с трафиком.

Для пользователя

  • Подождите несколько минут и повторите попытку. Код ответа 429 часто носит временный характер и может исчезнуть час собой, через несколько минут.
  • Уменьшите количество запросов, которые вы отправляете на сервер. Для этого закройте браузер и откройте его заново через пару минут.
  • Перейдите на другой IP-адрес. Если вы используете общий IP, например, обязательно перейдите на внутренний (локальный).
  • Обратитесь к администратору сайта. Если вы перепробовали все вышеперечисленное и по-прежнему сталкиваетесь с таким кодом ответа — свяжитесь с представителем сайта. Обычно email указывается на странице контактов.

Как избежать ошибки 429

Шаги для предотвращения высокого трафика и агрессивного сканирования со стороны краулеров мы частично рассмотрели в предыдущем разделе. Здесь даем дополнительные рекомендации:

  • Задействуйте повышенные меры безопасности. Брандмауэры, инструменты типа «цитадель», системы обнаружения вторжений — всё это может помочь предотвратить вредоносный трафик и снизить вероятность 429-о ответа.
  • Используйте инструменты для мониторинга трафика. Они помогут защититься от скачков трафика, агрессивного сканирования.
  • Внедрите CDN. Сеть доставки контента поможет распределить трафик между несколькими серверами, снизить нагрузку на отдельные серверы и в конце концов снизить вероятность кода 429.

В некоторых случаях код ответа 429 может быть постоянным для определенного пользователя. Это может происходить, если сервер настроен на блокировку запросов от определенного клиента или IP-адреса.

А еще этот ответ сервера может быть использован для отслеживания поведения пользователей. Дело в том, что отслеживая количество 429-х ответов, (которые получает клиент), сервер может получить представление о том, как клиент использует его, с какой интенсивностью. Эти данные могут использоваться для повышения производительности серверных систем, обнаружения дыр или для предотвращения определенных типов запросов.

Код 429 далеко не всегда возникает по вине клиента. И далеко не всегда является временным.

Коротко о главном

  • Ошибка HTTP 429 Too Many Requests — это код состояния, который возвращается сервером, когда он получает слишком много запросов с одного IP-адреса в течение определенного периода времени.
  • Распространенные причины 429 — высокий трафик, воздействия краулеров и других ботов, агрессивное сканирование и плохо настроенные приложения.
  • Возвращая код ответа 429 для определенных типов запросов, сервер может «отговорить» клиента от выполнения соответствующих запросов для защиты сервера от перегрузки или вредоносного воздействия.
  • Устранить код ответа 429 поможет время. Ошибка пропадает в течение нескольких минут.
  • Вебмастер и разработчик должен реализовать ограничение скорости, использовать балансировщик нагрузки, внедрить кэширование и оптимизировать конфигурацию сервера.

Материалы

Joshua Bloch. How to design a good API and why it matters

Программы-краулеры для сбора данных о представительских сайтах заданной предметной области–аналитический обзор

Оценить статью
6 ответов

Комментарии

Написать комментарий
Популярные статьи автора
Узнайте стоимость продвижения сейчас
Выберите удобный способ связи:
Выберите удобный способ связи:
Введите Ваш номер телефона:
Введите адрес Вашего сайта:
Введите Ваше имя:
Нажимая кнопку «Получить предложение» вы соглашаетесь с Политикой конфиденциальности.
Введите Ваш Email:
Введите адрес Вашего сайта:
Введите Ваше имя:
Нажимая кнопку «Получить предложение» вы соглашаетесь с Политикой конфиденциальности.
Оперативно отвечаем в рабочее время: с 10:00 до 19:00
Оперативно отвечаем в рабочее время: с 10:00 до 19:00
Вы уже проголосовали
Возьмем ТОП вместе?
Нажимая кнопку «Оставить заявку» вы соглашаетесь с Политикой конфиденциальности.
Цена лидов в различных нишах
Тематика Стоимость лида (Москва/Россия)
Отдых 500
Мебель 350
Оборудование 500
Бансковские услуги 500
Безопасность 500
Организация мероприятий, концерты, праздники 500
Недвижимость 500
Строительство и отделка 500
Грузоперевозки 500
Доставка еды 350
Юридические услуги 500
Бухгалтерские услуги 500
Пластиковые окна 500
Детские товары 350
Автозапчасти 350
Образование 500
Возьмем ТОП вместе?
Нажимая кнопку «Оставить заявку» вы соглашаетесь с Политикой конфиденциальности.
Оставить заявку сейчас
Выберите интересующую услугу *
Нажимая кнопку «Оставить заявку» вы соглашаетесь с Политикой конфиденциальности.
Подпишитесь на рассылку
Не пропустите самое интересное из мира SEO и Digital. Только актуальные и самые крутые статьи.
Заявка успешно отправлена!
Наши сотрудники уже приступили к анализу Вашего сайта. Наш менеджер свяжется с вами в течение дня, спасибо!