StudyCode
К практике
ПродвинутыйRate LimitБезопасностьMiddleware
ПродвинутыйRate LimitБезопасностьMiddleware

Rate Limiting

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

Нажми на любой элемент диаграммы для объяснения
Шаг 1 из 2
1

Зачем нужен Rate Limiting

Rate limiting защищает API от злоупотреблений: спама, брутфорса, DDoS.

Алгоритм: храним счётчик запросов для каждого клиента. Если превышен лимит — отвечаем 429 Too Many Requests.

Данные: { clientId: { count: number, resetAt: number } }

javascript
const requests = {}; // { clientId: { count, resetAt } }
const WINDOW_MS = 60_000; // 1 минута
const MAX_REQUESTS = 5;

app.use((req, res, next) => {
  const clientId = req.headers['x-client-id'] || req.ip;
  const result = checkRateLimit(requests, clientId, WINDOW_MS, MAX_REQUESTS);

  res.setHeader('X-RateLimit-Remaining', result.remaining);

  if (!result.allowed) {
    return res.status(429).json({ error: 'Too many requests' });
  }

  requests[clientId] = result.updatedState; // обновляем состояние
  next();
});