Maison > cadre php > Laravel > Comment utiliser un middleware pour limiter le flux de requêtes dans Laravel

Comment utiliser un middleware pour limiter le flux de requêtes dans Laravel

王林
Libérer: 2023-11-03 18:16:47
original
982 Les gens l'ont consulté

Comment utiliser un middleware pour limiter le flux de requêtes dans Laravel

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 ThrottleRequestsphp 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);
    }
}
Copier après la connexion

在上述代码中,我们使用了 Laravel 框架内置的 RateLimiter 类来实现请求限流的功能。TooManyAttempts 方法用于判断请求是否超过了最大允许数量,如果是则返回 429 状态码;hit 方法用于记录请求的次数,并设置时间窗口的长度。

三、注册中间件
要使我们创建的中间件生效,需要在 app/Http/Kernel.php 文件中的 $middleware 数组中注册中间件。找到该文件并添加以下代码:

protected $routeMiddleware = [
    // ...
    'throttle' => AppHttpMiddlewareThrottleRequests::class,
];
Copier après la connexion

四、使用中间件进行请求限流
通过以上步骤,我们已经成功创建了一个请求限流的中间件,并完成了中间件的注册。接下来,我们可以在路由定义或者控制器中使用该中间件了。

  1. 在路由定义中使用中间件:

    Route::middleware('throttle:10,1')->get('/test', function () {
     return 'Hello, Laravel!';
    });
    Copier après la connexion

    上述代码中,我们将 throttle 中间件应用于 /test 路由,每分钟最多允许 10 次请求,并且在达到最大请求次数后,用户将会收到 429 状态码。

  2. 在控制器中使用中间件:

    class TestController extends Controller
    {
     public function __construct()
     {
         $this->middleware('throttle:10,1');
     }
    
     public function index()
     {
         return 'Hello, Laravel!';
     }
    }
    Copier après la connexion

    通过以上代码,我们将 throttle 中间件应用于 TestController 控制器中的 index

    Le fichier middleware généré se trouve dans 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

    Dans le code ci-dessus, nous utilisons le 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. 🎜
    1. 🎜Utiliser le middleware dans la définition de la route : 🎜rrreee🎜Dans le code ci-dessus, nous appliquons le middleware 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. 🎜
    2. 🎜Utiliser le middleware dans le contrôleur : 🎜rrreee
    🎜Avec le code ci-dessus, nous appliquons le middleware 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal