Skip to main content

Hoe de RateLimiter-facade werkt

De rate limiting van Laravel bestaat uit de klasse Illuminate\Cache\RateLimiting\Limit en de RateLimiter-facade. Intern worden tellers opgeslagen in een cachedriver (standaard file of Redis) om het aantal requests te volgen. De throttle-middleware voert voor een binnenkomend request de closure uit die je met RateLimiter::for() hebt gedefinieerd, en geeft 429 Too Many Requests terug wanneer de limiet is bereikt.

Custom limiters definiëren in de AppServiceProvider

De rate-limitingconfiguratie doe je in de boot()-methode van App\Providers\AppServiceProvider.
Het eerste argument van RateLimiter::for() is de naam van de limiter, die je gebruikt om ernaar te verwijzen vanuit de throttle-middleware. De closure in het tweede argument moet een Illuminate\Cache\RateLimiting\Limit-instantie teruggeven.

Rate limits per gebruiker, IP-adres en plan

Verschillende limieten voor ingelogde gebruikers en gasten

Limieten op basis van het plan van de gebruiker

Een globale limiet op basis van het IP-adres

Throttling per IP-adres, onafhankelijk van een specifiek endpoint.

Meerdere limieten combineren

Geef je een array terug, dan worden alle limieten geëvalueerd. Zodra er één wordt bereikt, volgt een 429.
Als je meerdere limieten met dezelfde by-waarde definieert, voeg dan een prefix toe zodat de sleutels niet botsen.

De throttle-middleware en een custom limiternaam opgeven

Geef de gedefinieerde limiternaam door aan de throttle-middleware.

Registratie in bootstrap/app.php

Sinds Laravel 11 beheer je middleware in bootstrap/app.php.

Toepassingsvoorbeeld op API-routes

1

Definieer de limiters

Definieer meerdere limiters in de AppServiceProvider.
2

Pas de middleware toe op de routes

Hoe de responseheaders (X-RateLimit-*) werken

De throttle-middleware voegt de limietinformatie automatisch toe aan de responseheaders.

Een custom response teruggeven

Handmatig controleren met RateLimiter::attempt()

Wil je zonder de throttle-middleware op een willekeurig moment in je code een rate limit controleren, dan gebruik je RateLimiter::attempt().

Het aantal pogingen controleren en resetten

Voorbeeld van loginthrottling

Responsegebaseerde rate limiting

Wil je alleen bepaalde responses meetellen, dan gebruik je after(). Een voorbeeld dat alleen 404-responses telt om resource-enumeratieaanvallen te voorkomen:

Rate limiting met Redis

Zodra je de standaard-cachedriver naar Redis wijzigt, gebruikt ook de throttle-middleware automatisch Redis.

De Redis-driver configureren

throttleWithRedis gebruiken

Om de voor Redis geoptimaliseerde throttlingmiddleware te gebruiken, roep je throttleWithRedis() aan in bootstrap/app.php.
Hierdoor wordt de throttle-middleware gemapt op de klasse ThrottleRequestsWithRedis, die met de atomische operaties van Redis nauwkeurig telt.
Zorg dat Redis altijd beschikbaar is wanneer je throttleWithRedis() gebruikt. Als de verbinding met Redis mislukt, kunnen alle requests worden geweigerd.

De voordelen van Redis

  • Ondersteuning voor horizontaal schalen — tellers kunnen worden gedeeld tussen meerdere serverinstanties
  • Hoge nauwkeurigheid — atomische operaties voorkomen race conditions
  • TTL-beheer — tellers worden automatisch verwijderd via de native verloopfunctionaliteit van Redis

Gerelateerde pagina’s

Cache

Bekijk de configuratie en het gebruik van de cachedrivers van Laravel, inclusief Redis.
Laatst gewijzigd op 6 september 2026