📜  express js根据速率限制访问 - Javascript(1)

📅  最后修改于: 2023-12-03 15:30:41.300000             🧑  作者: Mango

Express.js根据速率限制访问

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`中间件,您可以轻松设置速率限制并保护您的应用程序。