Fonctionnement de la façade RateLimiter
La limitation de débit de Laravel repose sur la classe Illuminate\Cache\RateLimiting\Limit et la façade RateLimiter. En interne, un compteur est stocké dans un driver de cache (par défaut fichier ou Redis) pour suivre le nombre de requêtes.
Le middleware throttle exécute pour chaque requête la closure définie via RateLimiter::for() ; si la limite est atteinte, il renvoie 429 Too Many Requests.
Définir des limiters personnalisés dans AppServiceProvider
La configuration de la limitation de débit se fait dans la méthode boot() de App\Providers\AppServiceProvider.
RateLimiter::for() est le nom du limiter, référencé depuis le middleware throttle. La closure passée en second argument doit renvoyer une instance de Illuminate\Cache\RateLimiting\Limit.
Limitation par utilisateur, par IP, par plan
Différencier les limites entre utilisateurs authentifiés et invités
Limitation selon le plan de l’utilisateur
Limitation globale par adresse IP
Applique un throttling par IP, indépendamment de l’endpoint.Combiner plusieurs limites
Retourner un tableau évalue toutes les limites. Dès qu’une seule est atteinte,429 est renvoyé.
Lorsque vous définissez plusieurs limites avec la même valeur
by, préfixez-les pour éviter les collisions de clés.Middleware throttle et nom de limiter
Passez le nom du limiter au middleware throttle.
Enregistrement dans bootstrap/app.php
Depuis Laravel 11, les middlewares se configurent dans bootstrap/app.php.
Exemple d’application aux routes API
1
Définir les limiters
Définissez plusieurs limiters dans
AppServiceProvider.2
Appliquer les middlewares aux routes
Fonctionnement des en-têtes de réponse (X-RateLimit-*)
Le middleware throttle ajoute automatiquement les informations de limitation aux en-têtes de la réponse.
Réponse personnalisée
Vérification manuelle avec RateLimiter::attempt()
Sans utiliser le middleware throttle, pour vérifier la limitation à un moment arbitraire dans votre code, utilisez RateLimiter::attempt().
Vérifier et réinitialiser le nombre de tentatives
Exemple de throttling de connexion
Limitation basée sur la réponse
Pour ne compter que certaines réponses, utilisezafter(). Exemple : compter uniquement les 404 pour prévenir l’énumération de ressources.
Limitation basée sur Redis
Il suffit de passer le driver de cache par défaut à Redis pour que le middlewarethrottle l’utilise automatiquement.
Configuration du driver Redis
Utiliser throttleWithRedis
Pour utiliser le middleware de throttling optimisé pour Redis, appelez throttleWithRedis() dans bootstrap/app.php.
throttle est alors mappé à la classe ThrottleRequestsWithRedis, qui utilise les opérations atomiques de Redis pour un comptage précis.
Avantages de Redis
- Scalabilité horizontale — le compteur est partagé entre plusieurs instances de serveur.
- Haute précision — les opérations atomiques empêchent les conditions de course.
- Gestion du TTL — la fonctionnalité native d’expiration de Redis supprime automatiquement les compteurs.
Pages associées
Cache
Configuration et utilisation des drivers de cache Laravel, dont Redis.