Comment utiliser le middleware pour limiter le flux de requêtes dans Laravel
Introduction :
Lorsque nous développons des applications Web, nous rencontrons souvent des situations où nous devons limiter les requêtes des utilisateurs, par exemple, limiter le nombre de requêtes pouvant être envoyées par minute Un certain nombre de requêtes, ou limitation du nombre de requêtes simultanées pour une certaine interface, etc. Dans le framework Laravel, nous pouvons implémenter une limitation du flux de requêtes via un middleware. Cet article explique comment utiliser le middleware pour limiter le flux de requêtes et fournit des exemples de code correspondants.
1. Comprendre le middleware et la limitation du courant des requêtes
Le middleware est un mécanisme fourni par Laravel. Il peut intervenir à différentes étapes du traitement des requêtes et traiter, filtrer ou améliorer les requêtes. La limitation des demandes est un mécanisme qui limite la fréquence ou le nombre de demandes des utilisateurs. Elle est généralement utilisée pour contrôler la vitesse d'accès aux ressources et protéger la stabilité du serveur.
2. Créer un middleware de limitation
Dans Laravel, vous pouvez créer un middleware via la commande Artisan : php artisan make:middleware ThrottleRequests
php artisan make:middleware ThrottleRequests
生成的中间件文件位于 app/Http/Middleware
目录下,例如:ThrottleRequests.php
。
接下来,我们需要在中间件的 handle
方法中实现请求限流的逻辑,例如下面这段代码:
<?php namespace AppHttpMiddleware; use Closure; use IlluminateCacheRateLimiter; use SymfonyComponentHttpFoundationResponse; class ThrottleRequests { protected $limiter; public function __construct(RateLimiter $limiter) { $this->limiter = $limiter; } public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1) { $key = $request->ip(); // 使用 IP 地址作为限流的关键字 if ($this->limiter->tooManyAttempts($key, $maxAttempts)) { return new Response('Too Many Attempts.', 429); } $this->limiter->hit($key, $decayMinutes * 60); return $next($request); } }
在上述代码中,我们使用了 Laravel 框架内置的 RateLimiter
类来实现请求限流的功能。TooManyAttempts
方法用于判断请求是否超过了最大允许数量,如果是则返回 429 状态码;hit
方法用于记录请求的次数,并设置时间窗口的长度。
三、注册中间件
要使我们创建的中间件生效,需要在 app/Http/Kernel.php
文件中的 $middleware
数组中注册中间件。找到该文件并添加以下代码:
protected $routeMiddleware = [ // ... 'throttle' => AppHttpMiddlewareThrottleRequests::class, ];
四、使用中间件进行请求限流
通过以上步骤,我们已经成功创建了一个请求限流的中间件,并完成了中间件的注册。接下来,我们可以在路由定义或者控制器中使用该中间件了。
在路由定义中使用中间件:
Route::middleware('throttle:10,1')->get('/test', function () { return 'Hello, Laravel!'; });
上述代码中,我们将 throttle
中间件应用于 /test
路由,每分钟最多允许 10 次请求,并且在达到最大请求次数后,用户将会收到 429 状态码。
在控制器中使用中间件:
class TestController extends Controller { public function __construct() { $this->middleware('throttle:10,1'); } public function index() { return 'Hello, Laravel!'; } }
通过以上代码,我们将 throttle
中间件应用于 TestController
控制器中的 index
app /Http /Middleware
, par exemple : ThrottleRequests.php
. Ensuite, nous devons implémenter la logique de limitation de courant de requête dans la méthode handle
du middleware, comme le code suivant :
rrreee
RateLimiter
du framework Laravel pour implémenter la fonction de limitation du débit de requêtes. La méthode TooManyAttempts
est utilisée pour déterminer si la demande dépasse le nombre maximum autorisé, et si c'est le cas, un code d'état 429 est renvoyé. La méthode hit
est utilisée pour enregistrer le numéro ; des demandes et définir la durée de la fenêtre de temps. 🎜🎜3. Enregistrez le middleware🎜Pour rendre le middleware que nous créons efficace, vous devez enregistrer le middleware dans le tableau $middleware
du fichier app/Http/Kernel.php
. . Recherchez le fichier et ajoutez le code suivant : 🎜rrreee🎜 4. Utilisez un middleware pour demander la limitation de courant 🎜 Grâce aux étapes ci-dessus, nous avons réussi à créer un middleware de limitation de courant de demande et à terminer l'enregistrement du middleware. Ensuite, nous pouvons utiliser le middleware dans les définitions de routes ou les contrôleurs. 🎜throttle
à la route /test
, toutes les minutes A un maximum de 10 demandes est autorisé, et une fois le nombre maximum de demandes atteint, l'utilisateur recevra un code d'état 429. 🎜throttle
au TestController
Méthode index
dans le contrôleur. 🎜🎜Résumé : 🎜Cet article explique comment utiliser le middleware dans Laravel pour limiter le flux de requêtes et fournit des exemples de code correspondants. En utilisant un middleware limitant le courant, nous pouvons contrôler de manière flexible la fréquence et le nombre de demandes des utilisateurs, protégeant ainsi la stabilité et la sécurité du serveur. Dans le développement Web actuel, la limitation du flux de requêtes est une technologie très importante. J'espère que cet article pourra être utile à tout le monde. Fin 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!