Explicado
Rate limiting é a forma como os servidores se protegem contra abusos. Toda API e site voltados ao público limitam o número de requisições que um único cliente pode enviar em uma janela de tempo — `100 requisições por IP por minuto`, `5000 requisições por chave de API por hora`, `30 logins por conta por dia`. Quando um cliente excede o limite, o servidor retorna uma resposta 429 Too Many Requests (ou, em alguns casos, apenas reduz silenciosamente as respostas, coloca a requisição em fila ou passa a exibir CAPTCHAs).
Para cargas de trabalho de scraping e coleta de dados, o rate limiting é o piso operacional que determina a velocidade máxima possível. A solução ingênua — enviar menos requisições — limita sua taxa de transferência. A solução real é distribuir as requisições entre muitos identificadores (IPs, contas, IDs de sessão) para que nenhum identificador único ultrapasse seu limite. É exatamente por isso que os proxies residenciais existem como categoria de produto.
Os algoritmos de rate limiting do lado do servidor têm algumas formas. O token bucket permite que o cliente acumule tokens a uma taxa constante até um limite, permitindo picos de até o tamanho desse limite. A sliding window conta requisições em uma janela de tempo móvel, suavizando o limite. A fixed window reinicia a contagem em limites de relógio (por minuto, por hora). Cada uma tem implicações diferentes para como os scrapers devem ritmar suas requisições.
Como Funciona
A cada solicitação recebida, o servidor identifica o cliente (por IP, chave de API, ID de conta ou token de sessão) e verifica um contador para esse identificador na janela atual. Se o contador estiver abaixo do limite, a solicitação passa e o contador é incrementado. Se o contador estiver acima do limite, o servidor retorna 429 com um cabeçalho `Retry-After` indicando quanto tempo esperar.
A maioria das grandes APIs usa uma combinação de identificadores: o mesmo IP e conta atingem contadores diferentes com limites diferentes. As regras de limite de taxa da Cloudflare, por exemplo, podem limitar por IP, por caminho de URL, por sessão, ou por qualquer combinação. Alguns sistemas avançados usam variantes de leaky-bucket ou sliding-window-counter para uma aplicação mais suave.