Voltar ao blog

O Retorno do 402 Payment Required: O Que os Códigos de Status HTTP Revelam Sobre Tráfego de Bots

Códigos de status HTTP carregam mais sinal do que a maioria das ferramentas de analytics utiliza. Veja como a análise de status no servidor ajuda a separar humanos de bots sem rastrear ninguém.

A maioria das decisões de web analytics acontece no lado do cliente, depois que a página carregou e o JavaScript rodou. Esse modelo assume, silenciosamente, que toda requisição que chega ao seu servidor merece ser contada. Não merece. Uma parcela grande do tráfego bruto nunca renderiza nada, nunca pertence a um humano e nunca deveria chegar aos seus painéis. O sinal mais claro e mais cedo disponível para filtrar isso é algo que você já gera em toda requisição: o código de status HTTP.

Códigos de status são um sinal de analytics de primeira classe

A especificação de semântica HTTP (RFC 9110) define códigos de status como um inteiro de três dígitos que descreve o resultado de uma requisição, agrupados em cinco classes: 1xx informacional, 2xx sucesso, 3xx redirecionamento, 4xx erro de cliente e 5xx erro de servidor. Como o Monoid roda na edge da Cloudflare, vemos o código de status que a origem (ou a própria edge) retorna antes de qualquer script do cliente executar. Essa ordem importa. Uma visualização de página registrada por um beacon de navegador só pode existir se o documento foi de fato servido com um 2xx e interpretado. Mas o fluxo de requisições inclui muito mais do que documentos bem-sucedidos.

Considere o que uma origem típica retorna ao longo de um dia: documentos HTML bem-sucedidos, respostas 304 Not Modified para requisições condicionais, redirecionamentos 301/308 de canonicalização, 404s de scanners em sondagem e picos de 5xx durante incidentes. Contar apenas documentos renderizados com sucesso e ignorar o resto descarta contexto que explica anomalias na sua curva de tráfego.

Onde os bots se escondem na distribuição de status

Clientes automatizados se comportam de forma diferente dos navegadores, e os códigos de status expõem essa diferença a baixo custo. Scanners de vulnerabilidade geram aglomerados densos de respostas 404 e 403 ao sondar painéis administrativos e caminhos conhecidos de CMS. Crawlers agressivos ignoram o 429 Too Many Requests — definido na RFC 6585 como a resposta para limitação de taxa — e continuam martelando, produzindo uma assinatura que nenhuma sessão humana cria. Scrapers ingênuos frequentemente seguem cadeias de redirecionamento que um navegador real interromperia via bfcache ou histórico.

O código 402 Payment Required é instrutivo aqui. A RFC 9110 observa explicitamente que ele é reservado para uso futuro e não tem semântica padronizada, mas recentemente ganhou atenção renovada para acesso medido a APIs e agentes. Se sua origem começa a emitir 402s, esse tráfego é quase certamente programático, não uma pessoa navegando. Um pipeline consciente de status pode marcá-lo adequadamente em vez de inflar silenciosamente uma métrica.

Por que o analytics apenas client-side erra isso

Uma ferramenta apenas em JavaScript literalmente não consegue observar a maior parte disso. Se uma requisição retorna 403, nenhum script de analytics roda, então o evento fica invisível — mas a carga sobre sua infraestrutura é real, e a intenção por trás dela (reconhecimento, credential stuffing, scraping) costuma ser exatamente o que você quer saber. Por outro lado, ferramentas que contam linhas de log do servidor sem discriminar por status superestimam, tratando cada salto 301 e cada sondagem 404 como um "hit".

O meio-termo útil é a classificação de status na edge alimentando um modelo de contagem privacy-first:

  • 2xx text/html com uma navegação real é uma candidata a visualização de página.
  • 3xx deve ser atribuído ao destino, não contado duas vezes.
  • 4xx é diagnóstico, não audiência — exiba separadamente.
  • 5xx pertence a um painel de confiabilidade, correlacionado com qualquer queda em visualizações bem-sucedidas.

Fazendo isso sem rastrear ninguém

Nada disso exige identificar um visitante. Código de status, método, classe de resposta e temporização grosseira são propriedades da troca requisição-resposta, não de uma pessoa. O Monoid nunca define cookies, nunca lê localStorage e nunca faz fingerprinting de dispositivos. Não precisamos de um identificador estável para saber que uma explosão de 429s às 03:00 UTC veio de automação e não de uma audiência — a distribuição de status já diz isso por si só. Isso é minimização de dados jogando a nosso favor: o sinal menos pessoal também é um dos mais honestos para a qualidade do tráfego.

Há um benefício de compliance também. Filtrar tráfego não humano na edge significa que menos eventos espúrios entram no armazenamento de analytics, mantendo os dados registrados mais alinhados à sua finalidade declarada. Sob os princípios de limitação de armazenamento e limitação de finalidade do GDPR (Artigos 5(1)(c) e 5(1)(e)), não coletar lixo é estritamente melhor do que coletar e depois descartar.

Conclusões práticas

Se você constrói ou avalia analytics, faça três perguntas. Ele enxerga o código de status, ou apenas documentos renderizados? Ele separa sinais de confiabilidade (5xx) de sinais de audiência (2xx)? E ele consegue filtrar bots sem um identificador? Um pipeline que responde sim às três lhe dá números mais limpos e uma superfície de privacidade menor ao mesmo tempo — que, para variar, são a mesma decisão.

Fontes

Comments

Loading comments…