速率限制是網路開發中的重要概念。確保伺服器穩定性、資源有效率分配、防範惡意攻擊。因此,在本文中,我們將深入探討速率限制的本質、重要性、各種實作方法以及實際範例來展示其功能。讓我們開始吧?
速率限制是一種用於控制 Web 服務或伺服器的傳入請求或流量的策略。它有助於保護您的應用程式免受濫用,確保公平的資源分配並保持服務穩定。
以下是您應該使用速率限制的一些原因??
? 我甚至不想撒謊,因為我對令牌桶和漏桶演算法了解不多,因為我目前的專案不需要它們。但是,固定視窗和滑動視窗是您會遇到的最常見的類型。例如,OpenAI 的 GPT-4 使用帶有分層限制的固定視窗速率限制 - 第一層允許每分鐘 500 個請求。這種方法可能會導致流量激增,因為使用者可能會在視窗重置之前達到限制。
過程通常涉及:
現在您已經對速率限制及其工作原理有了基本的了解,讓我們在我們將要創建的專案中實際實現它。
我們將建立兩個項目來示範速率限制:
使用您選擇的任何名稱建立一個資料夾,然後在 VS code 或您使用的任何程式碼編輯器上開啟它。
在您建立的資料夾中,再建立兩個資料夾,分別稱為 frontend 和 backend。
之後,cd 進入後端資料夾並輸入此命令 npm init -y 來初始化 package.json 檔案
之後在後端資料夾中安裝以下 npm 套件??
npm install express cors express-rate-limit npm install -D nodemon
它們的作用:
之後,建立一個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"); });
以下是每個部位的作用:
然後:
當使用者在 15 分鐘內從相同 IP 存取您的 API 超過 100 次時,他們將收到錯誤訊息,而不是存取 API。
現在您知道它是如何運作的,我們希望透過添加到 package.json 來啟用自動重啟??
{ "scripts": { "dev": "nodemon index.js" } }
這就是後端的全部。
是時候設定前端了。
npm install express cors express-rate-limit npm install -D nodemon
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"); });
這是發生的事情:
這就是 GET 請求範例的全部內容。讓我們繼續下一個例子
對於這個範例,您可以決定註解掉第一個範例的程式碼並貼上此程式碼??
{ "scripts": { "dev": "nodemon index.js" } }
您可以看到大部分程式碼與第一個範例相同,但這裡只是一些關鍵區別??
也將此程式碼貼到前端
npm create vite@latest .
在這裡,我們只是透過表單向伺服器發出請求。讓我們看看這與 GET 範例有何不同:
該表單允許在 15 分鐘內提交 5 次 - 之後,使用者會看到速率限制錯誤訊息。
好了,夥伴們,恭喜你們讀完了這篇文章?我希望您現在了解速率限制的工作原理以及為什麼應該在您的專案中使用它,特別是如果您正在從事涉及資金的大型專案。如果您有任何疑問,請隨時在評論中提問。編碼愉快?
以上是速率限制的基礎知識:它是如何運作的以及如何使用它的詳細內容。更多資訊請關注PHP中文網其他相關文章!