O que é localhost? Loopback, 127.0.0.1 e ::1
Normalmente, localhost se refere à própria máquina de onde parte a requisição. Os endereços conhecidos são o IPv4 127.0.0.1 e o IPv6 ::1. O tráfego para eles é tratado dentro da pilha de rede da máquina, sem passar pelo roteador de casa nem chegar à internet. Por isso, um teste em localhost responde a uma pergunta bem específica: o serviço funciona localmente?
As faixas de endereços de loopback
O IPv4 reserva todo o bloco 127.0.0.0/8 para loopback, embora os exemplos quase sempre usem 127.0.0.1. O IPv6 tem o endereço especial ::1/128. Suas funções estão descritas na RFC 1122 e na RFC 4291. O nome localhost geralmente é resolvido para esses endereços pela configuração local do sistema. Cada aplicação pode tentar primeiro o IPv4 ou o IPv6, então funcionar em um e falhar no outro não significa necessariamente que a rede toda está com problema.
Exemplo com um servidor web local
Um desenvolvedor inicia uma aplicação escutando em 127.0.0.1:8000 e abre http://localhost:8000 no mesmo computador. É um teste útil, que não expõe a aplicação a outros dispositivos. Se um celular na mesma rede Wi-Fi abrir localhost:8000, ele tentará se conectar a si mesmo, e não ao computador do desenvolvedor. Para acessar a aplicação pelo celular, o serviço precisa escutar em uma interface de rede adequada, o firewall precisa permitir a conexão e o celular precisa usar o endereço do computador na LAN. Não publique um servidor de desenvolvimento na internet sem a proteção adequada.
Endereço de escuta vs. acesso externo
Um serviço vinculado apenas a 127.0.0.1 ou ::1 não é acessível diretamente a partir de outro dispositivo. Vincular a 0.0.0.0 no IPv4 geralmente significa escutar em todas as interfaces IPv4 aplicáveis, mas isso ainda não garante o acesso externo. Firewalls, contêineres, NAT e regras do provedor podem bloquear o caminho. No IPv6, um comportamento parecido depende da aplicação e das configurações do sistema. Um teste de porta pela internet não consegue confirmar se um serviço restrito ao loopback está funcionando localmente. Teste primeiro localmente e, depois, cada fronteira de rede separadamente.
Um erro comum com contêineres e servidores
Dentro de um contêiner ou de um servidor remoto, localhost é aquele contêiner ou servidor, e não o seu notebook. Por isso, uma string de conexão com o banco de dados apontando para localhost pode funcionar no desenvolvimento local e falhar depois do deploy, quando o banco está em outra máquina. Para diagnosticar, identifique onde o cliente roda e, em seguida, verifique o hostname de destino, a porta e o endereço em que o serviço escuta. Não troque localhost por um IP público sem avaliar a exposição. A comunicação interna geralmente pede um endereço de rede privado ou um hostname específico do serviço.