検索
ホームページウェブフロントエンドjsチュートリアルレート制限の基本: 仕組みと使用方法

レート制限は、Web 開発において重要な概念です。これにより、サーバーの安定性、効率的なリソース割り当て、悪意のある攻撃からの保護が保証されます。そこでこの記事では、レート制限の本質、その重要性、さまざまな実装方法、およびその機能を示す実践的な例について詳しく説明します。早速入ってみましょう?

レート制限とは何ですか?

レート制限は、Web サービスまたはサーバーへの受信リクエストまたはトラフィックの量を制御するために使用される戦略です。これは、アプリケーションを悪用から保護し、公平なリソース配分を保証し、サービスの安定性を維持するのに役立ちます。

レート制限を使用する理由

レート制限を使用する必要がある理由をいくつか示します??

  • 悪用の防止: ボットや悪意のあるユーザーがサーバーにリクエストを大量に送信するのを防ぎます。
  • リソース管理: すべてのユーザー間でリソースが公平に使用されるようにします。
  • セキュリティ: アプリケーション内の一部のエンドポイントの試行を制限することで、ブルート フォース攻撃を防止します。
  • コスト管理: 過剰な API 呼び出しによる予期せぬ請求を防止します。
  • パフォーマンス: サーバーの応答性を維持し、ダウンタイムのリスクを軽減します。

レート制限の種類

  1. 固定ウィンドウ (または単純) レート制限: このメソッドは、固定時間ウィンドウ内のリクエストを制限します。例: 「1 分あたり 100 リクエスト。」
  2. スライディング ウィンドウ レート制限: 過去数分または数秒など、最近の期間にわたるリクエストを追跡し、制限する動的な時間枠です。
  3. トークン バケット アルゴリズム: このメソッドは、トークンで満たされた「バケット」を使用してリクエストを管理します。受信リクエストごとにトークンが消費され、バケットは設定された間隔で補充されます。このアプローチでは、全体的なレート制限を維持しながら、トラフィックのバーストが可能になります。
  4. リーキーバケットアルゴリズム: トークンバケットに似ていますが、ひねりが加えられています。バケットがいっぱいになると、過剰なリクエストが「漏洩」するか破棄され、安定したフローが維持されます。

? 私は、トークン バケット アルゴリズムとリーキー バケット アルゴリズムについては、現在のプロジェクトでは必要としていないので、あまり知りません。嘘をつくつもりもありません。ただし、固定窓と引き違い窓が最も一般的なタイプです。たとえば、OpenAI の GPT-4 は段階的な制限を持つ固定ウィンドウ レート制限を使用しています。最初の段階では 1 分あたり 500 リクエストが許可されます。ユーザーがウィンドウがリセットされる直前に制限に達する可能性があるため、このアプローチではバースト トラフィックが発生する可能性があります。

レート制限の仕組み

このプロセスには通常、以下が含まれます:

  1. 追跡: 特定の期間内にユーザー (主に userId) または IP が行ったリクエストの数を監視します。
  2. しきい値: 制限を定義します (例: 1 時間あたり 100 リクエスト)。
  3. レスポンス: 制限を超えた場合、警告を送信するか、さらなるリクエストをブロックします (通常、HTTP ステータス コード 429 Too Many Requests が表示されます)。

レート制限の実装: 実践例

レート制限とその仕組みの基本を理解できたので、これから作成するプロジェクトにレート制限を実装してみましょう。

レート制限を示す 2 つのプロジェクトを作成します。

  1. GET リクエストの例
  2. POST リクエストの例

技術スタック

  • フロントエンド: React (Vite を使用)
  • バックエンド: Express (Node.js フレームワーク)

GET リクエストの例

任意の名前でフォルダーを作成し、VS コードまたは使用するコード エディターでそれを開きます。

作成したフォルダー内に、frontend と backend という名前のフォルダーをさらに 2 つ作成します。

その後、バックエンド フォルダーに移動し、コマンド npm init -y を入力して package.json ファイルを初期化します

その後、以下の npm パッケージをバックエンド フォルダー内にインストールします ??

npm install express cors express-rate-limit

npm install -D nodemon

これらの機能:

  • Express: Web サーバーを作成し、API ルートを処理します
  • cors: フロントエンドがバックエンドと安全に通信できるようにします
  • Express-rate-limit: 過剰なリクエストから API を保護します
  • nodemon: 開発中にサーバーを自動再起動します (これが D を使用する理由です)

その後、レート リミッターの設定に使用するため、index.js ファイルを作成します (任意に作成できます)。

このコードをコピーして貼り付けたら、後で説明します

const express = require("express");
const rateLimit = require("express-rate-limit");

const app = express();

// Set up rate limiter: 100 requests per 15 minutes
const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 5, // Limit each IP to 5 requests per `window` (here, per 15 minutes)
  message: "Too many requests from this IP, please try again later.",
});

// Apply the rate limiting middleware to all requests
app.use(limiter);

app.get("/api/data", (req, res) => {
  res.send("Welcome to the API!");
});

app.listen(5000, () => {
  console.log("Server running on http://localhost:5000");
});

各部分の機能は次のとおりです:

  1. 最初の 2 行は必要なパッケージをインポートします
  2. app =express() はサーバーを作成します
  3. リミッターは次のように構成されます。
    • windowMs: 15 分の時間ウィンドウ (15 × 60 × 1000 ミリ秒) を設定します
    • 最大: そのウィンドウで IP アドレスごとに 5 つのリクエストを許可します
    • message: ユーザーが制限を超えたときに表示されるエラー メッセージ

その後:

  1. app.use(limiter) はレート制限をすべてのルートに適用します
  2. ウェルカムメッセージを送信する簡単なテストルートを「/api/data」に作成します
  3. 最後に、ポート 5000 でサーバーを起動します

ユーザーが同じ IP から 15 分間に 100 回を超えて API にアクセスすると、API にアクセスする代わりにエラー メッセージが表示されます。

仕組みがわかったので、package.json に追加して自動再起動を有効にします??

 {
  "scripts": {
    "dev": "nodemon index.js"
  }
}

バックエンドについては以上です。

フロントエンドをセットアップします。

  • 新しいターミナルを開いてフロントエンドフォルダーに移動し、?? を実行します。
npm install express cors express-rate-limit

npm install -D nodemon
  • 次の手順に従ってください。typescript がわからない場合は、JavaScript を選択することをお勧めします
  • 不要なファイルを削除することで、少しクリーンアップできます。これが私の外観です

The Basics of Rate Limiting: How It Works and How to Use It

  • 完了したら、App.jsx を開いて、これから説明するこのコードを貼り付けます。
const express = require("express");
const rateLimit = require("express-rate-limit");

const app = express();

// Set up rate limiter: 100 requests per 15 minutes
const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 5, // Limit each IP to 5 requests per `window` (here, per 15 minutes)
  message: "Too many requests from this IP, please try again later.",
});

// Apply the rate limiting middleware to all requests
app.use(limiter);

app.get("/api/data", (req, res) => {
  res.send("Welcome to the API!");
});

app.listen(5000, () => {
  console.log("Server running on http://localhost:5000");
});

何が起こっているかは次のとおりです:

  1. データ管理のために useState をインポートし、API リクエストを行うために axios をインポートします
  2. 2 つの状態変数を作成します。
    • 応答: 成功した API 応答を保存します
    • error: エラー メッセージを保存します
  3. fetchData 関数:
    • ボタンがクリックされると呼び出されます
    • API からデータを取得しようとします
    • 応答またはエラー状態を更新します
    • try/catch を使用して成功とエラーを処理します
  4. UI には以下が表示されます。
    • タイトル
    • リクエストをトリガーするボタン
    • API 応答 (成功した場合)
    • 赤色のエラーメッセージ (リクエストが失敗した場合) 15 分以内にボタンをクリックしすぎると、バックエンド制限のため、レート制限エラー メッセージが表示されます。

GET リクエストの例については以上です。次の例に進みましょう

POSTリクエストの例

この例では、最初の例のコードをコメントアウトして、このコードを貼り付けることができます??

 {
  "scripts": {
    "dev": "nodemon index.js"
  }
}

ほとんどのコードは最初の例と同じであることがわかりますが、重要な違いがいくつかあります??

  • フォームデータを処理するために bodyParser を追加しました
  • フォームの送信を処理する POST エンドポイントを作成します

このコードをフロントエンドにも貼り付けます

  npm create vite@latest .

ここでは、フォームを通じてサーバーにリクエストを行っているだけです。これが GET の例とどのように異なるかを見てみましょう:

  1. 単一のボタンの代わりにフォームを使用します
  2. formData でフォームの状態を管理します
  3. handleInputChange を使用して入力の変更を処理します
  4. GET の代わりに POST リクエストを使用します
  5. 成功メッセージを緑色で表示します

フォームでは 15 分間に 5 件の送信が可能です。その後、ユーザーにはレート制限エラー メッセージが表示されます。

結論

さて皆さん、この記事を最後までお読みいただけましたでしょうか?レート制限がどのように機能するのか、そして特にお金が関係する大規模なプロジェクトに取り組んでいる場合に、レート制限をプロジェクトで使用する必要がある理由について理解していただけたと思います。ご質問がございましたら、お気軽にコメントでお問い合わせください。コーディングを楽しんでください?

以上がレート制限の基本: 仕組みと使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptの文字列文字を交換しますJavaScriptの文字列文字を交換しますMar 11, 2025 am 12:07 AM

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

jQuery日付が有効かどうかを確認しますjQuery日付が有効かどうかを確認しますMar 01, 2025 am 08:51 AM

単純なJavaScript関数は、日付が有効かどうかを確認するために使用されます。 関数isvaliddate(s){ var bits = s.split( '/'); var d = new Date(bits [2] '/' bits [1] '/'ビット[0]); return !!(d &&(d.getmonth()1)== bits [1] && d.getdate()== number(bits [0])); } //テスト var

jQueryは要素のパディング/マージンを取得しますjQueryは要素のパディング/マージンを取得しますMar 01, 2025 am 08:53 AM

この記事では、jQueryを使用して、DOM要素の内側のマージン値とマージン値、特に外側の縁と要素の内側の縁の特定の位置を取得して設定する方法について説明します。 CSSを使用して要素の内側と外側の縁を設定することは可能ですが、正確な値を取得するのは難しい場合があります。 // 設定 $( "div.header")。css( "margin"、 "10px"); $( "div.header")。css( "padding"、 "10px"); このコードはそうだと思うかもしれません

10 jQuery Accordionsタブ10 jQuery AccordionsタブMar 01, 2025 am 01:34 AM

この記事では、10個の例外的なjQueryタブとアコーディオンについて説明します。 タブとアコーディオンの重要な違いは、コンテンツパネルの表示方法と非表示にあります。これらの10の例を掘り下げましょう。 関連記事:10 jQueryタブプラグイン

10 jqueryプラグインをチェックする価値があります10 jqueryプラグインをチェックする価値がありますMar 01, 2025 am 01:29 AM

ウェブサイトのダイナミズムと視覚的な魅力を高めるために、10の例外的なjQueryプラグインを発見してください!このキュレーションされたコレクションは、画像アニメーションからインタラクティブなギャラリーまで、多様な機能を提供します。これらの強力なツールを探りましょう。 関連投稿: 1

ノードとHTTPコンソールを使用したHTTPデバッグノードとHTTPコンソールを使用したHTTPデバッグMar 01, 2025 am 01:37 AM

HTTP-Consoleは、HTTPコマンドを実行するためのコマンドラインインターフェイスを提供するノードモジュールです。 Webサーバー、Web Servに対して作成されているかどうかに関係なく、HTTPリクエストで何が起こっているかをデバッグして正確に確認するのに最適です

カスタムGoogle検索APIセットアップチュートリアルカスタムGoogle検索APIセットアップチュートリアルMar 04, 2025 am 01:06 AM

このチュートリアルでは、カスタムGoogle検索APIをブログまたはWebサイトに統合する方法を示し、標準のWordPressテーマ検索関数よりも洗練された検索エクスペリエンスを提供します。 驚くほど簡単です!検索をyに制限することができます

jQueryはscrollbarをdivに追加しますjQueryはscrollbarをdivに追加しますMar 01, 2025 am 01:30 AM

次のjQueryコードスニペットを使用して、Divコンテンツがコンテナ要素領域を超えたときにスクロールバーを追加できます。 (デモンストレーションはありません、それを直接firebugにコピーしてください) // d =ドキュメント // w =ウィンドウ // $ = jQuery var contentarea = $(this)、 wintop = contentarea.scrolltop()、 docheight = $(d).height()、 winheight = $(w).height()、 divheight = $( '#c

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。