SuperAPI AI 工具集

rate-limiting

通用与其它

查看项目

更新于 10-15 22:12

技能介绍

用途:这是一个面向 Next.js 的速率限制实现方案,用于防止暴力破解、表单垃圾提交和资源滥用,尤其适合保护登录、联系表单、文件上传、搜索、导出以及昂贵的 AI/API 调用等接口。

主要能力:默认按 IP 限制每分钟 5 次请求,基于内存存储,无数据库开销;支持通过 x-forwarded-for 识别代理后的客户端 IP;超限返回标准 HTTP 429 及 Retry-After、X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset 等响应头;同一 IP 所有使用 withRateLimit() 的路由共享同一配额。

使用方式:在路由中导入 withRateLimit,将其包裹处理函数后导出,例如 export const POST = withRateLimit(handler),并设置 runtime 为 nodejs;可与 CSRF 保护叠加使用,如 withRateLimit(withCsrf(handler))。客户端应对 429 做处理,可读取 retryAfter 或 Retry-After 头进行提示或指数退避重试。

测试:项目提供 app/api/test-rate-limit/route.ts 与 scripts/test-rate-limit.js,可运行 node scripts/test-rate-limit.js 验证,或用 curl 循环请求观察前 5 次返回 200、之后返回 429,等待窗口重置后可再次成功。

适用与限制:适用于会改写状态或消耗资源、可能被自动化滥用的接口,如联系表单、注册、密码重置、上传、搜索、导出、AI 调用、Webhook、评论提交、报告生成、批量操作。静态资源、仅读取公开数据的简单 GET、健康检查以及已由认证速率限制保护的接口通常无需再加。默认参数为每 IP 每分钟 5 次,如需不同粒度可参考自定义实现;该实现为单实例内存存储,未提供分布式或多实例共享状态的方案,相关资料未提供具体部署限制与自定义参数的官方说明。