Klient wysyła żądania zbyt szybko.
Kiedy go używać
Ograniczanie liczby żądań (rate limiting). Dołącz nagłówek Retry-After.
Typowe przyczyny i rozwiązania
Trafiłeś na limit żądań. Odczytaj nagłówek Retry-After, podany w sekundach lub jako data HTTP, oraz ewentualne nagłówki RateLimit lub X-RateLimit-Remaining, a potem wycofaj się z wykładniczo rosnącymi opóźnieniami i jitterem, zamiast od razu ponawiać. Typowe źródła: limity API na klucz lub IP, reguły rate limitingu w Cloudflare, ograniczanie prób logowania oraz limit_req w nginx, który zwraca 503, chyba że ustawisz limit_req_status 429.
Wielu użytkowników za jednym NAT-em lub firmowym proxy może wspólnie przekroczyć limit na IP. Jeśli limiter działa za load balancerem, opieraj go na prawdziwym IP klienta z X-Forwarded-For, inaczej wszyscy użytkownicy dzielą adres i limit balancera. Po stronie klienta grupuj żądania, cache'uj odpowiedzi i dodawaj losowe opóźnienie do zaplanowanych zadań, żeby nie startowały wszystkie w tej samej sekundzie.
Błąd klienta (4xx)
Kody 4xx to błędy klienta: samo żądanie jest błędne, nieautoryzowane albo wskazuje na coś, czego nie ma. Ponowienie tego samego żądania nic nie da.
Jak to wygląda
HTTP/1.1 429 Too Many RequestsJak go wysłać
| Node.js / Express | res.status(429).end() |
|---|---|
| Python / Flask | return '', 429 |
| nginx | return 429; |
Jak go sprawdzić
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/