✦ Oplossingen · HTTP-foutcodes

429 Too Many Requests: te veel aanvragen in korte tijd

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.

Zo ziet de foutmelding eruit

  • 429 Too Many Requests
  • Too Many Requests
  • HTTP ERROR 429
  • Error 1015 You are being rate limited
  • Rate limit exceeded

Waarom gebeurt dit?

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.

Zo herken je dit probleem

  • De fout verdwijnt vanzelf na een paar minuten wachten.
  • Een script of koppeling werkt een tijdje en geeft dan opeens alleen nog 429.
  • In de antwoordheaders staan Retry-After of headers met ‘RateLimit’ in de naam.
  • Geeft de server 503 bij drukte, dan is het eerder overbelasting: zie 502, 503 of 504-fout. Bij mailservers heet hetzelfde verschijnsel 421 try again later.

Zo los je het op, stap voor stap

Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.

  1. Wacht en ververs niet steeds

    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.

  2. Controleer VPN, extensies en gedeelde netwerken

    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.

  3. Ontwikkelaar: respecteer Retry-After en bouw backoff in

    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)'
  4. Ontwikkelaar: verminder het aantal aanvragen

    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.

  5. Beheerder: kijk wie de aanvragen doet

    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 10
  6. Beheerder: stel limieten in nginx gericht in

    Met 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
    }
  7. Beheerder: houd rekening met proxy’s, monitoring en zoekmachines

    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.

Wanneer schakel je hulp in?

  • Een koppeling met een webshop-, boekhoud- of betaalsysteem loopt vast op limieten.
  • Echte bezoekers of klanten krijgen 429 op je website en je vindt niet welke regel het veroorzaakt.
  • Je site wordt overspoeld door bots of crawlers en je wilt ze afremmen zonder Google te blokkeren.
  • Je wilt rate limiting instellen op je inlogpagina of API.

Lukt het niet? Wij helpen

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.

Aanvraag

Hulp aanvragen

Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.

Veelgestelde vragen

Vragen over dit probleem

Hoe lang moet ik wachten bij 429 Too Many Requests?

Kijk of de server een Retry-After-header of tijd noemt. Zonder die informatie is een paar minuten wachten meestal genoeg.

Waarom krijg ik 429 terwijl ik bijna niets doe?

Je deelt waarschijnlijk een IP-adres met anderen, bijvoorbeeld via een VPN, kantoor of openbare wifi, of een extensie doet op de achtergrond aanvragen.

Is een 429 slecht voor mijn vindbaarheid in Google?

Kortstondig niet: Google vertraagt dan het crawlen. Krijgt Googlebot langdurig 429, dan kunnen pagina’s minder vaak bezocht worden.

Waarom geeft mijn nginx-limiet 503 in plaats van 429?

Dat is de standaard van nginx. Zet limit_req_status 429 om de juiste statuscode terug te geven.