ホームページ > PHPフレームワーク > Laravel > Laravelでミドルウェアを使用してリクエストフローを制限する方法

Laravelでミドルウェアを使用してリクエストフローを制限する方法

王林
リリース: 2023-11-03 18:16:47
オリジナル
982 人が閲覧しました

Laravelでミドルウェアを使用してリクエストフローを制限する方法

Laravel でミドルウェアを使用してリクエスト フローを制限する方法

はじめに:
Web アプリケーションを開発するとき、ユーザーのリクエストを制限する必要があることがよくあります。たとえば、1 分あたりに送信される特定のリクエスト数を制限したり、特定のインターフェイスに対する同時リクエストの数を制限したりするなど、リクエストが制限される場合。 Laravel フレームワークでは、ミドルウェアを通じてリクエスト フロー制限を実装できます。この記事では、ミドルウェアを使用してリクエスト フローを制限する方法と、対応するコード例を紹介します。

1. ミドルウェアとリクエスト フロー制限について理解する
ミドルウェア (Middleware) は、Laravel が提供するメカニズムであり、リクエスト処理のさまざまな段階に介入して、リクエストを処理、フィルタリング、強化することができます。リクエスト スロットルは、ユーザー リクエストの頻度または数を制限するメカニズムで、通常、リソースのアクセス速度を制御し、サーバーの安定性を保護するために使用されます。

2. スロットリングミドルウェアの作成
Laravel では、Artisan コマンドを使用してミドルウェアを作成できます:
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 メソッドは、リクエストの数を記録するために使用されます。時間枠の長さを設定します。

3. ミドルウェアの登録
作成したミドルウェアを有効にするには、app/Http/Kernel.php ファイルに $middleware 配列が必要です。のミドルウェア。ファイルを見つけて次のコードを追加します:

protected $routeMiddleware = [
    // ...
    'throttle' => AppHttpMiddlewareThrottleRequests::class,
];
ログイン後にコピー

4. リクエスト電流制限にミドルウェアを使用する
上記の手順により、リクエスト電流制限ミドルウェアが正常に作成され、ミドルウェアの登録が完了しました。次に、ルート定義またはコントローラーでミドルウェアを使用できます。

  1. ルート定義でミドルウェアを使用する:

    Route::middleware('throttle:10,1')->get('/test', function () {
     return 'Hello, Laravel!';
    });
    ログイン後にコピー

    上記のコードでは、throttle ミドルウェアを /test ルーティングに適用します。 1 分あたり最大 10 件のリクエストが許可され、リクエストの最大数に達すると、ユーザーは 429 ステータス コードを受け取ります。

  2. コントローラーでのミドルウェアの使用:

    class TestController extends Controller
    {
     public function __construct()
     {
         $this->middleware('throttle:10,1');
     }
    
     public function index()
     {
         return 'Hello, Laravel!';
     }
    }
    ログイン後にコピー

    上記のコードでは、throttle ミドルウェアを ## に適用します。 #TestController コントローラーの index メソッド。

    概要:

    この記事では、Laravel でミドルウェアを使用してリクエスト フローを制限する方法を紹介し、対応するコード例を示します。電流制限ミドルウェアを使用することで、ユーザーのリクエストの頻度と数を柔軟に制御でき、サーバーの安定性とセキュリティを保護します。実際のWeb開発においてリクエストスロットルは非常に重要な技術ですので、この記事が皆様のお役に立てれば幸いです。仕上げる###

    以上がLaravelでミドルウェアを使用してリクエストフローを制限する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート