Skip to main content

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.
Le premier argument de 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, utilisez after(). 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 middleware throttle l’utilise automatiquement.

Configuration du driver Redis

Utiliser throttleWithRedis

Pour utiliser le middleware de throttling optimisé pour Redis, appelez throttleWithRedis() dans bootstrap/app.php.
Le middleware throttle est alors mappé à la classe ThrottleRequestsWithRedis, qui utilise les opérations atomiques de Redis pour un comptage précis.
Lorsque vous utilisez throttleWithRedis(), assurez-vous que Redis est disponible. Si la connexion à Redis échoue, toutes les requêtes risquent d’être refusées.

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.
Dernière modification le 13 juillet 2026