Heim  >  Artikel  >  PHP-Framework  >  So verwenden Sie Middleware, um den Anforderungsfluss in Laravel einzuschränken

So verwenden Sie Middleware, um den Anforderungsfluss in Laravel einzuschränken

王林
王林Original
2023-11-03 18:16:47938Durchsuche

So verwenden Sie Middleware, um den Anforderungsfluss in Laravel einzuschränken

So verwenden Sie Middleware, um den Anforderungsfluss in Laravel zu begrenzen

Einführung:
Wenn wir Webanwendungen entwickeln, stoßen wir häufig auf Situationen, in denen wir Benutzeranfragen begrenzen müssen, beispielsweise die Anzahl der Anfragen, die pro gesendet werden können Minute Eine bestimmte Anzahl von Anfragen oder die Begrenzung der Anzahl gleichzeitiger Anfragen für eine bestimmte Schnittstelle usw. Im Laravel-Framework können wir die Begrenzung des Anforderungsflusses durch Middleware implementieren. In diesem Artikel wird die Verwendung von Middleware zur Begrenzung des Anforderungsflusses vorgestellt und entsprechende Codebeispiele bereitgestellt.

1. Middleware verstehen und Strombegrenzung anfordern
Middleware ist ein von Laravel bereitgestellter Mechanismus. Er kann in verschiedenen Phasen der Anfrageverarbeitung eingreifen und Anfragen verarbeiten, filtern oder verbessern. Die Anforderungsdrosselung ist ein Mechanismus, der die Häufigkeit oder Anzahl von Benutzeranforderungen begrenzt. Er wird normalerweise verwendet, um die Zugriffsgeschwindigkeit von Ressourcen zu steuern und die Stabilität des Servers zu schützen.

2. Drosselungs-Middleware erstellen
In Laravel können Sie eine Middleware über den Artisan-Befehl erstellen:
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);
    }
}

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

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

protected $routeMiddleware = [
    // ...
    'throttle' => AppHttpMiddlewareThrottleRequests::class,
];

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

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

    Route::middleware('throttle:10,1')->get('/test', function () {
     return 'Hello, Laravel!';
    });

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

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

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

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

Die generierte Middleware-Datei befindet sich in app /Http Verzeichnis /Middleware, zum Beispiel: ThrottleRequests.php.

Als nächstes müssen wir die Logik der Anforderungsstrombegrenzung in der handle-Methode der Middleware implementieren, wie zum Beispiel den folgenden Code:
rrreee

Im obigen Code verwenden wir den integrierten RateLimiter des Laravel-Frameworks, um die Funktion zur Begrenzung der Anforderungsrate zu implementieren. Mit der Methode TooManyAttempts wird ermittelt, ob die Anforderung die maximal zulässige Anzahl überschreitet. Wenn dies der Fall ist, wird der Statuscode 429 zurückgegeben. Mit der Methode hit wird die Anzahl erfasst Anzahl der Anfragen und legen Sie die Länge des Zeitfensters fest. 🎜🎜3. Middleware registrieren🎜Um die von uns erstellte Middleware effektiv zu machen, müssen Sie die Middleware im Array $middleware in der Datei app/Http/Kernel.php registrieren . Suchen Sie die Datei und fügen Sie den folgenden Code hinzu: 🎜rrreee🎜 4. Verwenden Sie Middleware, um eine Strombegrenzung anzufordern. 🎜 Mit den oben genannten Schritten haben wir erfolgreich eine Middleware für eine Strombegrenzung erstellt und die Middleware-Registrierung abgeschlossen. Als nächstes können wir die Middleware in Routendefinitionen oder Controllern verwenden. 🎜
  1. 🎜Middleware in der Routendefinition verwenden: 🎜rrreee🎜Im obigen Code wenden wir jede Minute die throttle-Middleware auf die Route /test an A Es sind maximal 10 Anfragen zulässig. Sobald die maximale Anzahl an Anfragen erreicht ist, erhält der Benutzer den Statuscode 429. 🎜
  2. 🎜Middleware im Controller verwenden: 🎜rrreee
🎜Mit dem obigen Code wenden wir die throttle-Middleware auf TestController an code> <code>index-Methode im Controller. 🎜🎜Zusammenfassung: 🎜Dieser Artikel stellt vor, wie man Middleware in Laravel verwendet, um den Anforderungsfluss zu begrenzen, und stellt entsprechende Codebeispiele bereit. Durch den Einsatz von strombegrenzender Middleware können wir die Häufigkeit und Anzahl der Benutzeranfragen flexibel steuern und so die Stabilität und Sicherheit des Servers schützen. In der tatsächlichen Webentwicklung ist die Begrenzung des Anforderungsflusses eine sehr wichtige Technologie. Ich hoffe, dass dieser Artikel für alle hilfreich sein kann. Ende 🎜

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Middleware, um den Anforderungsfluss in Laravel einzuschränken. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn