词汇表

什么是速率限制?

速率限制是一种服务器端防御机制,限制单个客户端(通过 IP、账户或会话识别)在给定时间窗口内可发出的请求数量,用于保护基础设施、防止滥用并确保资源的公平使用。

了解网站和 API 如何对高流量客户端进行限速、速率限制背后的算法(令牌桶、滑动窗口、固定窗口),以及轮换代理如何突破每 IP 上限。

详解

限速是服务器保护自身免受滥用的方式。每个面向公众的 API 和网站都会限制单个客户端在一个时间窗口内可以发送的请求数量,例如"每个 IP 每分钟 100 个请求"、"每个 API key 每小时 5000 个请求"、"每个账户每天 30 次登录"。当客户端超出上限时,服务器会返回 429 Too Many Requests 响应(在某些情况下也可能悄悄降低响应速度、将请求加入队列,或开始提供 CAPTCHA)。

对于爬取和数据采集工作负载而言,限速是决定运行速度的操作基准。简单粗暴的解决方案——减少请求数量——会限制你的吞吐量。真正的解决方案是将请求分散到多个标识符(IP、账户、session ID)上,使得没有任何单个标识符超出其上限。这正是住宅代理作为一个产品类别存在的根本原因。

服务器端限速算法有几种形式。令牌桶算法允许客户端以稳定的速率积累令牌,直至达到上限,从而允许不超过上限大小的突发请求。滑动窗口算法在一个移动的时间窗口内统计请求数量,使上限更加平滑。固定窗口算法在时钟边界(每分钟、每小时)重置计数。每种算法对爬虫应如何控制请求节奏都有不同的影响。

工作原理

每次收到请求时,服务器会识别客户端(通过 IP、API 密钥、账户 ID 或会话令牌),并检查当前窗口内该标识符对应的计数器。如果计数器未超过限制,请求将被放行,计数器随之递增。如果计数器超过限制,服务器将返回 429 状态码,并附带 `Retry-After` 响应头,指示需要等待的时长。

大多数大型 API 会组合使用多种标识符:相同的 IP 和账户会触发不同的计数器,并对应不同的限制。例如,Cloudflare 的限流规则可以按 IP、URL 路径、会话或任意组合来设定限制范围。一些高级系统还采用漏桶算法或滑动窗口计数器的变体,以实现更平滑的流量控制。

类型

令牌桶

桶以稳定速率填充令牌,直至达到上限。每个请求消耗一个令牌。允许突发流量至桶容量上限,并随时间平滑。是现代 API 速率限制中最常见的算法。

漏桶

请求进入一个以固定速率排空的队列(桶)。超出的请求溢出并被拒绝。比令牌桶更严格地平滑突发流量。

固定窗口

计数器在时钟边界重置(每分钟、每小时)。实现简单,但在窗口边界存在突发问题(客户端可通过跨越两个窗口发送 2 倍上限的请求)。

滑动窗口

计数器查看过去 N 秒而非离散窗口。比固定窗口执行更平滑。滑动窗口日志和滑动窗口计数器是常见变体。

自适应 / 行为速率限制

限制根据请求模式和风险评分动态调整。被反机器人厂商(Cloudflare、Datadome)使用——同一客户端可能被允许每分钟 1000 个请求,也可能只允许 10 个,取决于流量看起来有多「真实」。

常见使用场景

保护公共 API 免受滥用
防止撞库攻击(登录速率限制)
大规模管理基础设施成本
在客户之间执行公平使用分级
减缓爬虫和内容滥用
在中断期间限制重试风暴
常见问题

常见问题

关于以下内容的常见问题 速率限制.

通过将请求分散到多个IP来实现。如果目标对每个IP每分钟限制60次请求,而你通过一个拥有10,000个IP的住宅代理池按请求轮换,理论上可以每分钟向目标发送600,000次请求,而不会有任何单个IP触发上限。实际上,行为信号也很重要,但IP轮换是基础技术。