Voltar para o blog

Como criar uma consulta IP-país rápida no seu stack

geolocalizaçãoengenhariaapi

Um guia prático para adicionar detecção de país a uma aplicação web: onde fazer a chamada, como usar cache e como manter isso fora do caminho crítico.

# Como criar uma consulta IP-país rápida no seu stack

A detecção de país deve acrescentar apenas alguns milissegundos a uma requisição — idealmente, na casa de um dígito. Veja como manter esse custo baixo.

Primeiro, identifique corretamente o IP do cliente

Quando há um proxy ou CDN no caminho, o endereço do socket costuma ser o da sua própria borda. Leia o cabeçalho que a sua infraestrutura realmente define e confie nele apenas quando vier da sua própria rede:

  • Cloudflare: CF-Connecting-IP
  • A maioria dos load balancers: a entrada não confiável mais à esquerda em X-Forwarded-For
  • Conexão direta: o endereço do par no socket

Interpretar X-Forwarded-For às cegas abre uma brecha para spoofing, porque o cliente pode inserir qualquer valor no início do cabeçalho.

Consulte uma vez por sessão, não a cada requisição

Faça a resolução na criação da sessão, salve o país e a classificação na sessão ou em um cookie assinado, e reutilize essa informação. Resolva novamente quando o IP mudar. Assim, milhares de consultas viram apenas uma.

Use cache com um TTL sensato

A geolocalização de um determinado /24 costuma permanecer estável por horas. Um cache em memória de uma hora, indexado por IP, elimina boa parte do tráfego repetido. Também vale armazenar resultados negativos, com um TTL mais curto, para que uma instabilidade não se transforme em uma tempestade de consultas.

Nunca bloqueie a renderização por causa disso

Defina um timeout rígido de algumas centenas de milissegundos para a consulta e tenha um fallback claro:

ts const geo = await Promise.race([ lookup(ip), timeout(300).then(() => null), ]); const country = geo?.country ?? defaultCountry;

Uma página renderizada com a moeda errada é um incômodo pequeno. Uma página que não renderiza é receita perdida.

Faça isso na borda sempre que possível

Se a sua aplicação roda em um edge runtime, a consulta acontece geograficamente perto do usuário e a latência adicional tende a ser desprezível. Resolva ali, anexe o resultado ao contexto da requisição e deixe a aplicação ler isso como dados comuns.

Guarde a decisão, descarte os dados

Armazene o resultado que importa para o negócio, como a moeda exibida ou a regra aplicada, em vez do registro bruto de localização. É mais barato, mais fácil de explicar em uma revisão de privacidade e, no fim, é isso que você realmente vai consultar depois.

Sua conexão