📅  最后修改于: 2023-12-03 15:30:41.300000             🧑  作者: Mango
在Express.js
中,限制访问速率可以避免恶意攻击、保护服务器资源和提高性能。本文将介绍如何使用express-rate-limit
中间件限制访问速率。
您可以使用npm
安装express-rate-limit
:
npm install --save express-rate-limit
使用express-rate-limit
非常简单——只需要调用中间件并将options
传递给它即可:
const express = require('express');
const rateLimit = require('express-rate-limit');
const app = express();
const apiLimiter = rateLimit({
windowsMs: 15 * 60 * 1000, // 15分钟
max: 100 // 每15分钟允许100个请求
});
app.use('/api/', apiLimiter);
这段代码将创建一个15
分钟内最多允许100
个请求的限制。这个限制将应用于路径为/api/*
的所有请求。
express-rate-limit
的选项如下:
windowMs
:有效窗口的时间长度(以毫秒为单位)。在这个时间内的请求将受到限制。默认值为60,000(1分钟)
。max
:在windowMs
中允许的最大请求数。默认值为1
。message
:当请求被限制时,向客户端发送的错误消息。默认值为"Too many requests, please try again later."
。statusCode
:当请求被限制时,向客户端发送的HTTP状态代码。默认值为429(Too Many Requests)
。headers
:当请求被限制时,向客户端发送的HTTP标题。默认值为{"Retry-After" : "X"}
,其中X
是限制剩余秒数。您也可以通过将一个选项对象传递给express-rate-limit
来设置这些选项:
const apiLimiter = rateLimit({
windowsMs: 15 * 60 * 1000, // 15分钟
max: 100, // 每15分钟允许100个请求
message: '您现在访问过于频繁,请稍后重试。',
statusCode: 429,
headers: {
'Retry-After': 300 // 以秒为单位
}
});
完成这些选项之后,所有访问路径为/api/
的请求都将被限制。如果一段时间内有太多的请求,它们将收到一个429
状态代码和一个指示需要等待多长时间才能再次发送请求的Retry-After
标头。
## 结论
通过限制访问速率,可以有效地保护您的服务器和应用程序资源不受攻击,提高性能和安全性。使用`express-rate-limit`中间件,您可以轻松设置速率限制并保护您的应用程序。