Nodea — logo

Rate limiting

Rate limiting (ograniczanie tempa żądań) to technika kontrolowania liczby żądań, jakie pojedynczy klient — adres IP, użytkownik lub klucz API — może wysłać do serwera w określonym oknie czasowym. Po przekroczeniu progu kolejne żądania są odrzucane (zwykle z kodem HTTP 429 Too Many Requests) lub opóźniane. Mechanizm chroni infrastrukturę przed przeciążeniem, nadużyciami i wybranymi rodzajami ataków.

Jak działa rate limiting

Limit definiuje się jako liczbę żądań na jednostkę czasu, np. „100 żądań na minutę na adres IP". Do egzekwowania stosuje się kilka klasycznych algorytmów:

  • Token bucket — do „wiadra" w stałym tempie dolewane są żetony; każde żądanie zużywa jeden, a przy pustym wiadrze jest odrzucane. Pozwala na krótkie wzrosty ruchu (bursty).
  • Leaky bucket — żądania wypływają ze stałą prędkością, wygładzając ruch.
  • Fixed window / sliding window — zliczanie żądań w oknie o stałej lub przesuwnej granicy czasu.

Rate limiting bywa realizowany na wielu poziomach: w warstwie aplikacji (np. middleware frameworka), na serwerze proxy/WWW (Nginx), w bramce API czy w zaporze aplikacyjnej.

Zastosowanie w praktyce

Ograniczanie tempa żądań jest standardem ochrony usług sieciowych:

  1. Ochrona APIAPI narzuca limity per klucz, by zapewnić sprawiedliwy dostęp i chronić przed nadużyciem zasobów.
  2. Obrona przed atakami — limity utrudniają brute force na formularze logowania i łagodzą skutki części ataków DDoS.
  3. Stabilność serwera — ograniczenie liczby zapytań na endpoint zapobiega wyczerpaniu zasobów przez agresywne boty i scrapery.

Dobrze zaprojektowany rate limiting rozróżnia ruch uwierzytelniony od anonimowego i zwraca czytelne nagłówki z pozostałym limitem, aby klienci mogli dostosować częstotliwość zapytań.

Powiązane pojęcia

Najczęstsze pytania

Czym różni się rate limiting od throttlingu?

Terminy bywają używane zamiennie, ale zwykle rate limiting oznacza twarde odrzucanie żądań ponad limit (odpowiedź 429), a throttling — spowalnianie lub kolejkowanie nadmiarowych żądań bez ich odrzucania. Oba służą ochronie zasobów przed przeciążeniem.

Jaki kod HTTP zwraca serwer po przekroczeniu limitu?

Standardowo jest to kod 429 Too Many Requests. Odpowiedź często zawiera nagłówek Retry-After informujący, po jakim czasie klient może ponowić żądanie, oraz nagłówki opisujące pozostały limit.