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

Nov 03, 2023 pm 06:16 PM
使用 请求限流 laravel中间件

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!

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

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser les liens magnétiques Comment utiliser les liens magnétiques Feb 18, 2024 am 10:02 AM

Comment utiliser les liens magnétiques

Comment utiliser les fichiers mdf et mds Comment utiliser les fichiers mdf et mds Feb 19, 2024 pm 05:36 PM

Comment utiliser les fichiers mdf et mds

Quel logiciel est CrystalDiskmark ? -Comment utiliser crystaldiskmark ? Quel logiciel est CrystalDiskmark ? -Comment utiliser crystaldiskmark ? Mar 18, 2024 pm 02:58 PM

Quel logiciel est CrystalDiskmark ? -Comment utiliser crystaldiskmark ?

Comment télécharger foobar2000 ? -Comment utiliser foobar2000 Comment télécharger foobar2000 ? -Comment utiliser foobar2000 Mar 18, 2024 am 10:58 AM

Comment télécharger foobar2000 ? -Comment utiliser foobar2000

Comment utiliser l'application Baidu Netdisk Comment utiliser l'application Baidu Netdisk Mar 27, 2024 pm 06:46 PM

Comment utiliser l'application Baidu Netdisk

Comment utiliser Xiaoai Speaker Comment connecter Xiaoai Speaker à un téléphone mobile Comment utiliser Xiaoai Speaker Comment connecter Xiaoai Speaker à un téléphone mobile Feb 22, 2024 pm 05:19 PM

Comment utiliser Xiaoai Speaker Comment connecter Xiaoai Speaker à un téléphone mobile

Comment utiliser NetEase Mailbox Master Comment utiliser NetEase Mailbox Master Mar 27, 2024 pm 05:32 PM

Comment utiliser NetEase Mailbox Master

Guide simple de la source du miroir pip : maîtrisez facilement comment l'utiliser Guide simple de la source du miroir pip : maîtrisez facilement comment l'utiliser Jan 16, 2024 am 10:18 AM

Guide simple de la source du miroir pip : maîtrisez facilement comment l'utiliser

See all articles