用途:为 API 提供限流与滥用防护,防止接口被滥用。
主要能力:支持多种限流策略,包括固定窗口(如每小时 100 次请求)、滑动窗口(更精确、防突发)、令牌桶(允许突发至上限)和漏桶(平滑请求速率)。可实现按路由策略、基于 IP 和基于用户的限制,并记录限流日志、监控滥用模式、为受信任 IP 配置允许列表。
使用方式(Express 示例):引入 express-rate-limit 创建全局限流器与更严格认证端点限流器,例如 globalLimiter 配置 windowMs: 15 * 60 * 1000、max: 100,authLimiter 配置 max: 5 并启用 skipSuccessfulRequests,分别挂载到 /api/ 与 /api/auth/login。基于 Redis 的实现通过 ioredis 使用有序集合记录时间窗口内请求计数,函数 checkRateLimit 返回 allowed 与 remaining。基于用户的限流封装 userRateLimit,以 rate_limit:user:${req.user.id} 为键,并设置 X-RateLimit-Limit、X-RateLimit-Remaining 响应头,超限时返回 429 与 retryAfter。IP 防护可维护 ipBlocklist 并调用威胁情报接口检查 IP 信誉。
响应头:X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset、Retry-After。
最佳实践:不同端点使用不同限额,昂贵操作使用更低限额,跳过内部服务限流,返回有帮助的错误信息,记录限流违规并监控滥用。
限制:资料未提供具体部署平台、性能基准、第三方依赖版本或收费信息。