Os quatro significam a mesma coisa ao nível que interessa: a conversa nunca chegou suficientemente longe para ter um resultado. O Chrome tentou abrir uma ligação a um servidor, e a ligação foi recusada, cortada, fechada ou nunca respondida - por isso não há página, não há código de estado e não há nada do site para ler.

É isso que os separa dos erros com que costumam ser comparados. Um 404 ou um 504 significa que um servidor lhe respondeu, em HTTP, com alguma coisa. Um ERR_CONNECTION_ qualquer significa que a troca falhou por baixo do HTTP, antes de nada disso poder acontecer. O Chrome inventa estes nomes ele próprio, e é por isso que não se parecem nada com um código de estado.

Os quatro diferem em como falhou, e essa diferença é a maior parte do diagnóstico.

ERR_CONNECTION_REFUSED

Alguma coisa respondeu, e o que disse foi não.

A máquina naquele endereço está acessível, e recusou ativamente a ligação naquela porta. Não está nada à escuta ali, ou uma firewall está a devolver a ligação de imediato em vez de a descartar em silêncio.

As causas mais comuns, pela ordem por que as deve verificar: o servidor não está a correr; está a correr numa porta diferente da que está no endereço; está ligado a 127.0.0.1, por isso só aceita ligações da própria máquina; ou pediu https numa porta que serve http simples.

Se é programador e vê isto contra localhost, é quase sempre uma daquelas quatro e quase nunca o navegador.

ERR_CONNECTION_TIMED_OUT

Não respondeu nada de todo.

O Chrome enviou pacotes para o escuro e esperou. Esta é a assinatura de algo que descarta o tráfego em silêncio em vez de o recusar: uma firewall configurada para descartar em vez de rejeitar, um endereço que já não leva a lado nenhum, uma VPN a mandar o seu tráfego para um sítio de onde não se chega ao destino.

O sinal é a espera. Uma recusa volta no instante; um tempo esgotado demora tanto quanto durar a paciência do navegador.

ERR_CONNECTION_RESET

A ligação estava aberta, e depois foi morta a meio da frase.

Alguma coisa enviou um reset: o servidor, ou mais frequentemente algo entre si e ele. Proxies empresariais que inspecionam o tráfego, software de segurança na máquina, uma ligação instável, ou um equipamento de rede que decidiu que a ligação não era permitida depois de já ter começado.

É aquele dos quatro com mais probabilidade de ser causado por algo que não é o site. Se acontece numa rede e noutra não, encontrou a resposta sem sequer tocar no site.

ERR_CONNECTION_CLOSED

A mesma forma de um reset, terminada com mais educação: a outra ponta fechou a ligação enquanto o navegador ainda esperava mais.

Na prática aponta para o servidor, ou para algo à frente dele, a desistir a meio caminho: um processo a reiniciar, um balanceador de carga a largar uma ligação inativa, um desencontro de protocolo. Nesta família também verá ERR_CONNECTION_ABORTED, que normalmente quer dizer que o pedido foi cancelado antes de terminar, às vezes pela própria página ao navegar para outro lado.

Quatro perguntas que o localizam em cerca de um minuto

Seja qual for dos quatro que tem, a mesma triagem estreita-o. Faça-as por ordem e pare quando uma responder.

  • Outros sites funcionam? Não, e o problema é a sua ligação, não o site.
  • Funciona numa janela privada? Sim, e é uma extensão, um cookie ou um recurso em cache mais do que a rede.
  • Funciona noutro dispositivo na mesma rede? Sim, e é aquela máquina: o software de segurança dela, as definições de proxy dela, a VPN dela.
  • Funciona em dados móveis em vez de wi-fi? Sim, e é aquela rede, que é a explicação habitual para um reset que só uma pessoa está a ver.

Duas destas quatro perguntas eliminam o site por completo, o que vale a pena saber antes de alguém passar uma tarde a ler registos de servidor à procura de uma falha que nunca chegou ao servidor.

Session Replay

Extensão gratuita do Chrome. Um clique na página que se está a portar mal captura a captura de ecrã, a consola e o registo de rede, e devolve-lhe um link para colar no ticket.

Instalar a extensão

Porque é que estes são tão mal reportados

Um erro de ligação não produz nenhum estado HTTP e muitas vezes nada de útil na consola. Ou a página não carrega de todo, ou - muito pior de diagnosticar - carrega bem enquanto um pedido lá dentro falha desta maneira, por isso o site parece partido de uma forma específica e inexplicável.

Esse segundo caso é o que chega como “o botão de guardar não faz nada”. Nenhum erro no ecrã, nenhum texto vermelho, nada que a pessoa lhe possa citar. No painel de rede é evidente e é uma linha: um pedido em estado falhado, sem estado, e um host ao lado.

Qual é o host importa mais do que tudo o resto no relatório. Se os pedidos que falham nomeiam todos o seu próprio domínio, é a sua infraestrutura ou o caminho até ela. Se nomeiam um fornecedor de pagamentos, um serviço de mapas ou um servidor de tipos de letra, a página está a comportar-se corretamente e algo de que depende não está - e quem lê pode ir ver a página de estado desse fornecedor em vez da sua.

O registo de rede num relatório de erro leva exatamente isso, que é a diferença entre esta classe de erro ser reproduzível e ser uma história sobre algo que aconteceu numa terça-feira.

A versão curta

  • Refused: alguma coisa disse não, de imediato. Normalmente não há nada à escuta naquela porta.
  • Timed out: nada disse nada. Normalmente algo descarta o tráfego em silêncio.
  • Reset: a ligação morreu em pleno voo. Normalmente a rede pelo meio, não o site.
  • Closed: a outra ponta desligou cedo. Normalmente o servidor ou algo à frente dele.

E nenhum dos quatro é um erro HTTP, e é por isso que não aparece nenhum código de estado ao lado e que o servidor pode não ter registo nenhum da tentativa.