Krijg je 429 Too Many Requests? Een site of API remt je af omdat je te veel aanvragen stuurt. Lees hoe Retry-After werkt, hoe je API-limieten respecteert en zelf limieten instelt.
Een 429 Too Many Requests betekent dat je in korte tijd meer aanvragen hebt gedaan dan de server toestaat. Dat heet rate limiting: een website of API telt per IP-adres, account of sleutel hoeveel aanvragen er binnenkomen en remt af boven een grens. Vaak stuurt de server een Retry-After-header mee: het aantal seconden (of een tijdstip) waarna je het opnieuw mag proberen.
Gewone bezoekers krijgen een 429 bijvoorbeeld door een pagina vaak achter elkaar te verversen, door een extensie die op de achtergrond aanvragen doet, of doordat ze een IP-adres delen met veel anderen (een kantoor, openbare wifi, een VPN). Bij API’s ontstaat het als een script of koppeling sneller aanvragen doet dan het abonnement of de documentatie toestaat.
Op je eigen site kan een 429 juist gewenst zijn: een limiet op het inlogformulier of de zoekfunctie beschermt tegen bots en wachtwoordaanvallen. Het wordt een probleem als echte bezoekers, je eigen monitoring of zoekmachines er last van krijgen.
Retry-After of headers met ‘RateLimit’ in de naam.Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.
Wacht een paar minuten voordat je het opnieuw probeert. Elke keer verversen telt als nieuwe aanvraag en kan de wachttijd verlengen. Staat er een tijd op de foutpagina, houd die aan.
Zet een VPN uit of probeer een ander netwerk, zoals mobiele data. Gebruik je extensies die pagina’s automatisch verversen of prijzen controleren, zet die tijdelijk uit. Op een gedeeld netwerk kan iemand anders de limiet al hebben opgebruikt.
Lees bij een 429 de Retry-After-header en wacht minstens zo lang. Ontbreekt die, wacht dan steeds langer tussen pogingen (exponentiële backoff), met wat willekeurige spreiding zodat niet alle processen tegelijk terugkomen. Stop na een aantal pogingen in plaats van eindeloos door te gaan.
curl -si https://api.voorbeeld.nl/v1/orders | grep -i -E '^(HTTP|retry-after|x-ratelimit|ratelimit)'Bewaar antwoorden die niet vaak veranderen een tijdje in een cache, haal gegevens in grotere pagina’s of met batch-aanvragen op als de API dat ondersteunt, en gebruik webhooks in plaats van steeds opnieuw vragen of er iets veranderd is. Controleer in de documentatie wat de limiet per minuut of per dag is voor jouw sleutel.
Geeft je eigen site 429 aan echte bezoekers, zoek dan uit welke IP-adressen en adressen het meeste verkeer veroorzaken. Vaak is het één bot of crawler die heel snel pagina’s ophaalt.
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -n 10
awk '$9 == 429 {print $1, $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -n 10Met limit_req_zone en limit_req beperk je het aantal aanvragen per IP-adres. Zet de limiet vooral op gevoelige onderdelen zoals inloggen, zoeken en formulieren, niet zomaar op de hele site. Let op: nginx geeft standaard 503 bij een overschreden limiet; met limit_req_status 429 wordt het de juiste code. burst vangt korte pieken op.
# in het http-blok
limit_req_zone $binary_remote_addr zone=perip:10m rate=5r/s;
limit_req_status 429;
# in het server-blok
location /login {
limit_req zone=perip burst=10 nodelay;
# ... normale afhandeling
}Zit je site achter een CDN of proxy, dan komen alle aanvragen van een paar IP-adressen; tel dan op het echte bezoekersadres (via de real-IP-instelling), anders blokkeer je iedereen tegelijk. Zet je eigen monitoring op een uitzonderingslijst. Zoekmachines vertragen bij herhaalde 429’s hun bezoek; houd ze dus niet langdurig tegen als je gevonden wilt worden.
Let op: Een 429 is een signaal om langzamer te gaan, geen fout om omheen te werken. Wie meerdere sleutels of IP-adressen gebruikt om een limiet te omzeilen, overtreedt vaak de voorwaarden van de dienst en riskeert een blokkade.
Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.
Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.
Kijk of de server een Retry-After-header of tijd noemt. Zonder die informatie is een paar minuten wachten meestal genoeg.
Je deelt waarschijnlijk een IP-adres met anderen, bijvoorbeeld via een VPN, kantoor of openbare wifi, of een extensie doet op de achtergrond aanvragen.
Kortstondig niet: Google vertraagt dan het crawlen. Krijgt Googlebot langdurig 429, dan kunnen pagina’s minder vaak bezocht worden.
Dat is de standaard van nginx. Zet limit_req_status 429 om de juiste statuscode terug te geven.
Hulp nodig van een mens? Website-onderhoud · Hosting en onderhoud · Gratis website-scan · Alle oplossingen