Ограничение на количество новых соединений

«Дадата» использует систему защиты от сетевых атак. В числе прочих мер, она запрещает создавать более 60 новых сетевых соединений в минуту.

Что это вообще значит

Когда ваша программа обращается к «Дадате», она создаёт сетевое соединение. Обычно программы не создают всё новые и новые соединения, а используют ограниченное количество уже созданных. У этого подхода есть разные названия — HTTP persistent connection, keepalive, «пул соединений» — но суть одна и та же: программа переиспользует сетевые соединения, а не создаёт новые на каждый запрос.

Создание большого количества сетевых соединений — типичное поведение злоумышленников, которые атакуют облачные сервисы. Поэтому система защиты «Дадаты» следит, чтобы количество новых соединений с каждого IP-адреса не превышало 60 в минуту.

Ограничение никак не связано с количеством запросов в секунду. Представим две ситуации:

  1. Программа выполняет 20 запросов в секунду, используя всего одно соединение.
  2. Программа выполняет 100 запросов в минуту, создавая новое соединение на каждый запрос.

У первой программы не возникнет проблем с новым ограничением, несмотря на большое количество запросов. А у второй — возникнет.

Как это отразится на вас

Если вы не используете API «Дадаты» и не проксируете запросы к «Дадате» через свой сервер — никак не отразится, дальше можно не читать.

Если ваша программа переиспользует сетевые соединения — тоже никак не отразится. Повторное использование сетевых соединений считается хорошим тоном среди разработчиков. Большинство платформ (Java, .NET, Python) используют его по умолчанию. С большой вероятностью, ваша интеграция работает так же, поэтому ничего делать не придётся.

Но если ваша программа создаёт отдельное сетевое соединение на каждый запрос (чаще всего этим «грешат» программы на PHP), и вы делаете более 60 запросов в минуту — интеграция не будет нормально работать.

Как изменить программу, чтобы она не создавала новые соединения

Если используете PHP — возьмите нашу библиотеку, создайте один раз объект DadataClient и переиспользуйте его — так новые соединения не будут создаваться. Если это невозможно — проксируйте запросы через nginx, настроив его для повторного использования соединений.

Если работаете с другим языком программирования — почитайте документацию библиотеки, которую используете для работы с HTTP. Там точно это есть.

Сервис поддержки клиентов работает на платформе UserEcho