词汇表

什么是速率限制?

速率限制是一种服务器端防御机制,限制单个客户端(通过 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轮换是基础技术。

HTTP 429 'Too Many Requests' 表示客户端已超过速率限制。响应通常包含一个 `Retry-After` 头,指示在重试前需要等待多长时间。行为规范的客户端会遵守 Retry-After;需要更高吞吐量的爬虫则会切换到新IP并立即重试。

只能有限地实现——通过将请求速度控制在上限以下并缓慢复用同一个IP。对于任何真实的大流量使用场景,都需要轮换代理。在没有住宅代理池的情况下,购买足够多的独立IP来突破每IP速率限制,除了极小规模的操作外,在经济上是不可行的。

读取响应头。许多API会发送 `X-RateLimit-Limit`、`X-RateLimit-Remaining`、`X-RateLimit-Reset` 头,描述上限、剩余配额以及窗口重置时间。对于不发送这些头的网站,观察响应码(401、429、503),当这些响应码开始出现时进行退避。

速率限制对请求量进行节流;CAPTCHA则要求客户端证明其是人类。大多数反机器人系统将两者结合使用:在速率限制以内,请求正常通过;超过限制后,请求会收到CAPTCHA挑战而不是直接封锁。两者从不同角度防御相同的威胁。

可以。Shifter的住宅代理网关将你的请求分散到大量IP池中,因此每IP速率限制仅适用于你总流量的一小部分。配合每个会话的真实请求节奏和现代浏览器指纹,大多数速率限制障碍将变得几乎不可见。