Как сервер решает, что запросов стало слишком много

Серверу приходится делить ограниченные ресурсы — процессорное время, память и пропускную способность — между множеством клиентов. Поэтому он может считать запросы отдельно для приложения, учётной записи, IP-адреса или другого идентификатора и сравнивать их с заданным пределом за определённый промежуток времени. Конкретное правило зависит от сервиса: например, он может ограничивать число обращений за минуту или скорость, с которой они поступают.

Для этого подходят разные алгоритмы. В простом варианте сервер считает запросы в скользящем временном окне. Другой подход — «ведро токенов»: условный запас разрешённых обращений постепенно пополняется, а каждый запрос расходует один токен. Такой механизм допускает короткий всплеск активности, но не позволяет постоянно работать на чрезмерной скорости.

Что происходит после превышения лимита

Когда запас исчерпан, сервер может временно отклонить новые обращения, задержать их или ответить, что клиенту следует попробовать позже. В веб-API для этого часто используют код HTTP 429 — «слишком много запросов». Иногда ответ содержит подсказку о времени ожидания, но это зависит от реализации.

Ограничение не обязательно означает, что приложение неисправно или заблокировано навсегда. Оно может лишь сообщать: сейчас запросы приходят быстрее, чем сервис готов их обрабатывать. Если приложение после отказа тут же повторит обращение, оно усилит нагрузку и будет снова упираться в лимит. Поэтому клиентам обычно полезно делать паузу и увеличивать её при повторных отказах; случайный разброс времени ожидания помогает множеству устройств не обратиться к серверу одновременно.

Так сервер защищает не только себя: предел скорости помогает сохранить доступ для остальных пользователей, даже если один клиент внезапно начинает отправлять запросы слишком часто.