O que é localhost? 127.0.0.1 explicado

Publicado:

15 min de leitura

Acar Diveroli
Autor: Acar Diveroli
Comando > ping localhost com cursor azul, uma linha em laço que volta ao início, respostas de ::1 e um selo LOOPBACK

Você inicia um projeto e o terminal mostra Local: http://localhost:5173. Um tutorial manda abrir localhost:3000. Ou você abre a lista de dispositivos do seu roteador Wi-Fi e um deles se chama "localhost". Depois que você repara, a palavra aparece em todo lugar, e ela sempre significa a mesma coisa: este dispositivo, conversando consigo mesmo.

Este artigo explica o que é localhost, como ele se relaciona com 127.0.0.1 e ::1 e o que acontece quando você o abre. Depois trata do número que vem após os dois-pontos, da diferença entre localhost, 0.0.0.0 e o seu endereço IP, de quem consegue acessá-lo, do que ping localhost mostra no Windows e de por que o tráfego local não deve passar pelo proxy.

O que é localhost?

Localhost é um nome de host reservado que sempre significa "o dispositivo em que estou rodando". Quando um navegador, um script ou qualquer outro programa se conecta ao localhost, a conexão vai de um programa no seu computador para outro programa no mesmo computador.

O nome é protegido por um padrão. A RFC 6761 (2013) inclui localhost entre os nomes de domínio de uso especial: o software de resolução de nomes deve sempre respondê-lo com um endereço de loopback sem perguntar a um servidor DNS, e os registros de domínio não podem atribuí-lo a ninguém. A regra também vale para nomes que terminam em .localhost, como app.localhost.

Cada dispositivo tem o próprio localhost: no seu notebook é o notebook, no seu celular é o celular. Esse único fato explica a maior parte da confusão em torno do localhost, de "funciona no meu computador, mas não no meu celular" a "meu colega não consegue abrir o meu link".

O que são 127.0.0.1 e ::1?

127.0.0.1 e ::1 são os endereços de loopback para os quais o localhost aponta, o primeiro no IPv4 e o segundo no IPv6. Um endereço de loopback envia o tráfego para uma interface de rede virtual, a interface de loopback, que o devolve direto ao mesmo dispositivo.

O IPv4 reserva um bloco inteiro para isso. A RFC 1122, o documento de requisitos para hosts de 1989, separou todo endereço que começa com 127 como "endereço de loopback interno do host", que não deve aparecer fora de um host. O registro de endereços de uso especial da RFC 6890 ainda lista 127.0.0.0/8 como "Loopback" e o marca como não encaminhável e não global: os roteadores nunca o repassam.

O bloco vai de 127.0.0.0 a 127.255.255.255, cerca de 16,7 milhões de endereços, e todos voltam para o próprio dispositivo: na nossa máquina de teste com Windows 11, ping 127.45.6.7 respondeu do mesmo jeito que 127.0.0.1. O IPv6 tem um único endereço de loopback, ::1; a RFC 4291 exige que um pacote destinado a ele seja descartado se algum dia chegar por uma rede.

Que caminho faz uma requisição para o localhost?

Uma requisição para o localhost passa pelas mesmas etapas que qualquer requisição web, mas cada etapa acontece dentro do seu dispositivo. É isto que acontece quando você digita localhost:3000 no navegador:

  1. O navegador pede o endereço. O sistema operacional precisa resolver localhost, como faria com example.com.
  2. O sistema responde sem consultar a rede. Os resolvedores reconhecem o localhost por conta própria, e o Linux e o macOS também mantêm uma linha como 127.0.0.1 localhost no arquivo hosts, o pequeno arquivo de texto que associa nomes a endereços antes de o DNS ser consultado (onde fica o arquivo hosts e como editá-lo). No nosso teste com curl no Windows 11, localhost foi resolvido tanto para ::1 quanto para 127.0.0.1.
  3. O pacote vai para a interface de loopback. Em vez do adaptador Wi-Fi ou Ethernet, o sistema o entrega a uma interface virtual sem cabo por trás. Nada chega ao seu roteador.
  4. O sistema procura um programa na porta 3000. Se houver um programa escutando ali, ele recebe a requisição. Se não houver, o sistema recusa a conexão na hora.
  5. A resposta volta pelo mesmo caminho, sem sair da máquina.

Como o nome dá dois endereços, um cliente pode tentar ::1 primeiro e depois recorrer a 127.0.0.1; o nosso curl fez exatamente isso quando o servidor de teste escutava só em 127.0.0.1. Um cliente que não faz essa troca é recusado, embora o servidor esteja rodando.

O que significa localhost:3000?

localhost:3000 significa "o programa deste dispositivo que escuta na porta 3000". Uma porta é um número de 0 a 65.535 que diz ao sistema qual programa deve receber uma conexão: o endereço IP encontra o dispositivo, e a porta encontra o programa nele.

Os números mais pesquisados são as portas padrão de ferramentas de desenvolvimento muito usadas:

  • 3000: a porta padrão do next dev no Next.js e uma escolha comum em tutoriais de Node.js.
  • 5173: a porta padrão do servidor de desenvolvimento do Vite.
  • 8000: a porta padrão do servidor web embutido do Python, python -m http.server.
  • 8080: a porta alternativa registrada para tráfego web, usada por muitos servidores locais e proxies.

Se você não iniciou nada, nada escuta ali e a página não carrega. Por que a 8080 atende tanto proxies quanto servidores de desenvolvimento, e como descobrir o programa que ocupa uma porta, está em O que é a porta 8080?

A porta também importa para as regras de segurança do navegador. Dois endereços que diferem só na porta são origens diferentes, então uma página em localhost:5173 que chama uma API em localhost:3000 faz uma requisição entre origens, que a API precisa permitir com cabeçalhos CORS.

Diferença entre localhost, 127.0.0.1, 0.0.0.0 e o seu endereço IP

No terminal esses endereços se parecem, mas chegam a públicos muito diferentes:

EndereçoO que significaQuem consegue acessar
localhostUm nome para este dispositivoSó este dispositivo
127.0.0.1O endereço de loopback do IPv4Só este dispositivo
::1O endereço de loopback do IPv6Só este dispositivo
0.0.0.0Para um servidor: todos os endereços deste dispositivoOutros dispositivos também, se o firewall permitir
192.168.1.20 (exemplo)O endereço deste dispositivo na rede de casaDispositivos na mesma rede
IP públicoO endereço do seu roteador na internetA internet, só se o roteador encaminhar uma porta

0.0.0.0 é uma configuração de escuta, não um destino: um servidor vinculado a ele aceita conexões em todos os endereços que o dispositivo tem. O servidor de desenvolvimento do Next.js e o servidor embutido do Python escutam em todos os endereços por padrão, enquanto o Vite fica no localhost a menos que você acrescente --host.

Por que o localhost recusa a conexão?

"A conexão com localhost foi recusada" significa que o navegador chegou ao seu próprio computador, mas nenhum programa aceitou a conexão naquela porta. No Chrome em português, a página mostra "Não é possível acessar esse site", depois "A conexão com localhost foi recusada." e o código ERR_CONNECTION_REFUSED.

Em geral, o servidor de desenvolvimento não está rodando, roda em outra porta ou escuta no outro endereço de loopback. As verificações para cada caso estão em Como resolver err_connection_refused.

Por que os navegadores tratam o localhost como contexto seguro?

Como o tráfego para um endereço de loopback nunca sai do dispositivo, os navegadores tratam http://localhost como uma página HTTPS mesmo sem certificado. Um contexto seguro (secure context) é uma página em que o navegador confia o bastante para liberar recursos sensíveis, como service workers, geolocalização ou acesso à câmera por getUserMedia().

O guia do MDN sobre contextos seguros lista os hosts que recebem esse tratamento: localhost, nomes que terminam em .localhost, o bloco 127.0.0.0/8 e ::1. No nosso teste com o Chromium 145, window.isSecureContext retornou true tanto em http://localhost:3000 quanto em http://127.0.0.1:3000.

A exceção para no limite do dispositivo. O mesmo app aberto por http:// simples no seu celular, pelo endereço do computador na rede de casa, não é um contexto seguro, então um recurso que funciona no localhost pode falhar ali.

O localhost é seguro, e outras pessoas podem acessá-lo?

Ninguém na sua rede ou na internet consegue se conectar ao seu 127.0.0.1 ou ao seu ::1: os roteadores não encaminham esses endereços, e em qualquer outro dispositivo eles significam aquele outro dispositivo. Um programa que escuta só no localhost só pode ser acessado por software do seu próprio computador.

Os riscos estão em outros três lugares:

  • Programas que escutam em todos os endereços. Um servidor vinculado a 0.0.0.0 pode ser acessado pela sua rede de casa, e pela internet se o roteador encaminhar a porta dele. O servidor embutido do Python faz isso a menos que você acrescente --bind 127.0.0.1.
  • Sites que você visita. Os scripts de uma página rodam no seu navegador e podem tentar enviar requisições para o localhost. As versões recentes do Chrome pedem a sua permissão antes, e o CORS impede que uma página leia uma resposta local, a menos que o programa local permita.
  • Software que já está no seu computador. Qualquer programa da máquina, inclusive malware, pode conversar com o localhost; por isso, proteja bancos de dados locais e painéis de administração com senha.

Como fazer ping no localhost?

Abra o Prompt de Comando ou o PowerShell no Windows, ou o Terminal no macOS ou no Linux, e digite:

bash
ping localhost

Esta é a saída da nossa máquina de teste com Windows 11; trocamos o nome do computador por MY-PC. O idioma das linhas depende do idioma do seu Windows; os endereços e os tempos são os mesmos:

text
Pinging MY-PC [::1] with 32 bytes of data:
Reply from ::1: time<1ms
Reply from ::1: time<1ms
Reply from ::1: time<1ms
Reply from ::1: time<1ms

Ping statistics for ::1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

O Windows escreve na primeira linha o nome do próprio computador, e não a palavra localhost. As respostas vêm de ::1 porque o Windows usou o IPv6 primeiro; ping -4 localhost força o IPv4 e responde de 127.0.0.1. Todos os tempos ficam abaixo de um milissegundo, porque os pacotes nunca saíram da máquina.

No macOS e no Linux, o ping continua até você pressionar Ctrl+C; ping -c 4 localhost para depois de quatro respostas. Se ping localhost falhar, o problema está no próprio computador, por exemplo um arquivo hosts que aponta o localhost para outro endereço, e não no roteador nem no seu provedor.

Localhost e proxies: por que o tráfego local deve ficar fora do proxy

Um proxy na internet não consegue acessar o seu localhost, porque, para o servidor proxy, localhost é o próprio servidor proxy. É por isso que as configurações de proxy têm exceções para endereços locais.

No Windows, em Configurações > Rede e Internet > Proxy, a configuração manual de proxy tem a caixa de seleção Não usar o servidor proxy para endereços locais (intranet), que a Microsoft recomenda deixar marcada, e uma lista de exceções onde você pode acrescentar localhost e 127.0.0.1. O Chrome nunca envia localhost nem endereços de loopback por um proxy, a menos que seja iniciado com uma regra de exceção especial.

Ferramentas de linha de comando podem não fazer isso por você. No nosso teste com o curl 8.22.0, definir a variável http_proxy mandou uma requisição para http://localhost:3000 ao proxy, onde ela expirou; ao acrescentar NO_PROXY=localhost,127.0.0.1,::1, ela foi direto para o programa local, como descreve a documentação do curl sobre variáveis de ambiente de proxy.

O localhost também aparece do outro lado: proxies de depuração rodam no seu próprio computador em um endereço como 127.0.0.1:8080, e a configuração de proxy do navegador aponta para lá. Quando os seus scripts enviam o tráfego externo por um serviço remoto como os Proxies residenciais, mantenha os nomes locais em NO_PROXY para que as chamadas à sua própria API fiquem na máquina.

Onde você encontra o localhost

  • Desenvolvimento web. Os servidores de desenvolvimento mostram um endereço localhost ao iniciar, e você testa o site ali primeiro.
  • Bancos de dados e ferramentas de administração locais. Um banco de dados instalado para uso próprio pode escutar só em 127.0.0.1, fora do alcance de outras máquinas.
  • Login em apps de desktop. Alguns apps concluem um login mandando o seu navegador para um endereço como http://127.0.0.1:51004/..., onde o próprio app escuta; a RFC 8252 descreve esse padrão para OAuth.
  • A lista de dispositivos do seu roteador. Um dispositivo que não informa um nome próprio pode aparecer ali como "localhost".

Erros comuns

  • Abrir localhost no celular para acessar o computador. No celular, localhost é o celular; use o endereço do computador na rede de casa.
  • Compartilhar um link de localhost. http://localhost:3000 enviado a um colega abre o computador dele, não o seu.
  • Escutar em 0.0.0.0 quando só você precisa do app. Vincule-o a 127.0.0.1, a menos que outro dispositivo precise acessá-lo.
  • Mandar tráfego local por um proxy remoto. Sem uma exceção, a requisição vai para o proxy, que não enxerga a sua máquina.
  • Apontar o localhost para outro endereço no arquivo hosts. Os programas esperam que ele seja o endereço de loopback e falham de jeitos estranhos quando não é.

Guia de decisão

Sua necessidadeO que fazer
Abrir um projeto que você acabou de iniciarUse o endereço que o servidor de desenvolvimento mostra
"A conexão com localhost foi recusada"Inicie o servidor, verifique a porta e tente 127.0.0.1 com a mesma porta
Testar o site pelo celularFaça o servidor escutar na rede e abra o IP local do computador
Manter uma ferramenta local privadaVincule-a a 127.0.0.1 e proteja-a com senha
Verificar o software de rede do próprio computadorRode ping localhost
Usar um proxy em scripts sem quebrar as chamadas locaisColoque localhost,127.0.0.1,::1 em NO_PROXY

Perguntas frequentes

O que é localhost:3000?

É o programa que escuta na porta 3000 do seu próprio dispositivo, na maioria das vezes um servidor de desenvolvimento. O Next.js usa a porta 3000 por padrão, então o endereço costuma aparecer depois que você roda um comando de inicialização. Se nada estiver rodando nessa porta, o navegador mostra "A conexão com localhost foi recusada."

Localhost é o mesmo que o meu endereço IP?

Não. Localhost é o endereço de loopback, 127.0.0.1 ou ::1, que só o seu dispositivo pode usar e que é o mesmo em todos os dispositivos. O seu endereço na rede de casa, como 192.168.1.20, permite que outros dispositivos cheguem até você, e o seu IP público é o que os sites veem.

Um site pode acessar o meu localhost?

Pelo servidor dele, não, mas a página que você abre roda scripts no seu navegador, e esses scripts podem tentar. Desde a versão 142, o Chrome pede a sua permissão antes que um site público acesse endereços da rede local ou de loopback (anúncio do Chrome sobre Local Network Access).

Por que o meu roteador mostra um dispositivo chamado localhost?

O roteador lista cada dispositivo com o nome que o próprio dispositivo envia quando pede um endereço por DHCP. Alguns dispositivos nunca recebem um nome próprio e enviam um nome padrão, e em muitos sistemas baseados em Linux esse padrão é localhost. É um dispositivo real na sua rede, não o endereço de loopback do seu computador; compare o endereço MAC dele com os dos seus dispositivos e troque a senha do Wi-Fi se não conseguir identificá-lo.

Como abro o localhost no celular?

Não com a palavra localhost, porque no celular ela significa o celular. Conecte-se ao mesmo Wi-Fi, inicie o servidor de desenvolvimento para que ele escute na rede (o Vite precisa de --host) e abra o endereço do computador na rede de casa com a porta, por exemplo http://192.168.1.20:5173. O firewall do computador precisa permitir a conexão.

O localhost funciona sem conexão com a internet?

Sim. O tráfego do localhost nunca sai do dispositivo, então um servidor local, um banco de dados local e ping localhost funcionam com o Wi-Fi desligado.

Em resumo

Localhost é o nome que cada dispositivo usa para si mesmo, apoiado nos endereços de loopback 127.0.0.1 e ::1, e o tráfego enviado para lá dá meia-volta dentro da máquina. O número da porta escolhe o programa, então localhost:3000 abre o seu servidor de desenvolvimento. Outros dispositivos não conseguem acessar o localhost; os riscos reais são programas que escutam em todos os endereços e requisições locais enviadas a um proxy remoto. Se os seus scripts mandam o tráfego externo por proxies, mantenha o localhost nas exceções e compare as opções na nossa página de produtos de proxy.