Heim > Artikel > PHP-Framework > 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 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 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
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. 🎜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. 🎜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!