速率限制是网络开发中的一个重要概念。确保服务器稳定性、资源高效分配、防范恶意攻击。因此,在本文中,我们将深入探讨速率限制的本质、重要性、各种实现方法以及实际示例来演示其功能。让我们开始吧?
速率限制是一种用于控制 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中文网其他相关文章!