跳转到主要内容

速率限制

本文约需 2 分钟阅读

速率限制 (Rate Limiting) 是指对一定时间内接受的请求数量设定上限,从而保护服务免受过载和滥用的机制。它被广泛采用,以缓解 DDoS 攻击、抑制暴力破解攻击,并实现 API 的公平使用。截至 2025 年,随着 API 经济的扩张,速率限制已成为 API 安全的基本要求。

现场使用案例

“由于没有为 API 设置速率限制,一个客户端每秒发送 500 个请求,导致其他用户的响应延迟。采用令牌桶方式引入每秒 50 个请求的限制,并将突发容量设为 100 后,所有用户的响应时间都趋于稳定。”

速率限制流程

接收来自客户端的请求
速率限制器 (检查计数器)
在限制内
200 OK (执行处理)
超过限制
429 Too Many Requests

主要算法

固定窗口方式像“每分钟最多 100 个请求”那样以固定的时间窗口进行计量。实现简单,但存在请求在窗口边界处突发集中的问题。滑动窗口方式以最近的时间窗口进行计量,从而缓解突发问题。令牌桶方式是一种以恒定速度补充令牌、每个请求消耗一个令牌的模型,可以在限制平均速率的同时允许短时间的突发。API 设计书籍 (Amazon)可供系统性学习。

实现场景

在登录端点上,将来自同一 IP 地址的登录尝试限制为“5 分钟内最多 10 次”,以抑制凭据填充。对于 API,设置分层限制,例如对已认证用户限制为“每小时 1,000 个请求”,对未认证用户限制为“每小时 100 个请求”。超过限制时,返回 HTTP 429 (Too Many Requests) 响应以及 Retry-After 标头,告知客户端适当的等待时间。将 API 密钥管理与速率限制相结合,可以有效防止 API 的滥用。

设计要点

速率限制的阈值需要通过分析正规用户的使用模式来设定。阈值过低会损害正规用户的体验,过高则无法防御攻击。在分布式环境中,使用 Redis 等共享存储来管理计数器,从而在多台服务器之间应用一致的限制。将强随机密码与速率限制相结合,可以大幅提升登录页面的安全性。DDoS 防御书籍 (Amazon)也很有参考价值。

相关术语

这篇文章对您有帮助吗?

XHatena