Ir para o conteúdo
OneKitly

Códigos de estado HTTP explicados: os que realmente se confundem

Publicado a 29/04/2026 · 8 min de leitura · Ferramentas para programadores

Daniel Okonkwo

Daniel OkonkwoProgramador front-end e redator de Tecnologia na OneKitly

Desempenho web · Formatos de ficheiro

Verificado a partir de 2 fontes

Ver perfil
Em resumo

O primeiro dígito é a parte que todos os clientes, caches e rastreadores leem: 1xx informativo, 2xx sucesso, 3xx redireção, 4xx a culpa foi do pedido, 5xx foi do servidor. Dentro disso, as distinções que mudam o comportamento são estas. 308 é um 301 com a garantia de que o método e o corpo sobrevivem à redireção, e 307 é um 302 com a mesma garantia — clientes antigos transformam um POST redirecionado em GET com 301 e 302, que é precisamente a razão de existirem 307 e 308. 401 significa que o pedido não trazia credenciais válidas e deve vir com um cabeçalho WWW-Authenticate; 403 significa que as credenciais estavam boas e a ação é recusada mesmo assim, pelo que voltar a entrar não ajuda. 404 diz que aqui não há nada sem se comprometer com o motivo; 410 diz que o recurso foi retirado de propósito e não volta, e é cacheável por omissão. Em 429 e 503, o Retry-After é uma estimativa que o servidor publica em segundos ou como data HTTP — uma orientação para clientes bem-comportados, não a promessa de regressar a horas.

301 contra 308, 302 contra 307, 401 contra 403, 404 contra 410 — e o que promete realmente o Retry-After num 429 ou num 503. Os pares em que escolher o código errado muda o comportamento, não apenas a redação.

O primeiro dígito é a única parte que alguns clientes leem

A RFC 9110 exige que um cliente compreenda a classe de um código de estado mesmo sem reconhecer o código em si, e que trate qualquer código desconhecido como o x00 da sua classe. Um cliente que nunca ouviu falar do 451 trata-o como um 400; um 599 desconhecido é tratado como um 500. É essa regra que torna o espaço extensível, e também significa que a classe carrega quase todo o comportamento: as caches decidem a partir dela se guardam, os proxies se repetem e os rastreadores se indexam, quase sempre antes de analisarem seja o que for do seu corpo de resposta.

A consequência prática é que devolver um 200 com o erro descrito no corpo coloca a falha onde mais nada a vê. A sua sonda de disponibilidade fica verde, o seu CDN guarda a página de erro em cache e um motor de busca indexa-a como um documento real. É o problema do soft 404 na sua forma geral, e vale a pena auditá-lo, porque a correção é uma linha no código de estado e não algo arquitetural.

Redireções: quais conservam o seu POST

A grelha dos quatro códigos de redireção cruza na verdade duas perguntas: permanente ou temporária, e o método sobrevive. 301 e 308 são permanentes, 302 e 307 temporárias; 307 e 308 são os dois que proíbem o cliente de alterar o pedido. A MDN é direta sobre a razão do par recente: o 301 já exigia que método e corpo ficassem inalterados, mas essa exigência era mal tratada pelos clientes antigos, que passavam a GET. Ninguém conseguia corrigir o parque instalado, por isso cunharam-se dois códigos novos com a garantia escrita na definição.

A escolha decorre portanto do tráfego. Para uma página que só recebe GET, o 301 serve e é aquilo a que os motores de busca estão mais habituados. Para um caminho de API, o destino de um formulário ou qualquer coisa que possa receber POST, PUT ou DELETE, use 308 e o pedido chega intacto. Um aviso sobre a permanência: os navegadores guardam um 301 em cache de forma agressiva e alguns mantêm-no muito mais tempo do que espera, pelo que um 301 emitido durante uma experiência pode sobreviver-lhe em máquinas a que não tem acesso. Sirva 302 ou 307 enquanto ainda decide.

Os erros mais vezes devolvidos de forma errada

401 e 403 são o par que mais tempo de suporte custa. O 401 significa que o pedido não trazia credenciais de autenticação válidas, e a MDN nota que é enviado com um cabeçalho WWW-Authenticate que descreve o esquema que o servidor espera — é um convite a tentar de novo com credenciais. O 403 é a situação oposta: as credenciais são perfeitamente válidas e o cliente continua sem permissão para esta ação. Devolver um 401 a um utilizador autenticado diz ao cliente dele para se reautenticar, o que produzirá exatamente a mesma recusa, e leva-o a pensar que a sessão está partida quando não está.

404 e 410 diferem apenas no grau de certeza, e é esse o ponto. A orientação da MDN é explícita: se quem opera o servidor não sabe se a condição é temporária ou permanente, deve usar 404. O 410 usa-se quando retirou a coisa de propósito e ela não volta — é cacheável por omissão e diz aos rastreadores para deixarem de perguntar. O Retry-After, por seu lado, é um cabeçalho que leva um atraso em segundos ou uma data HTTP; num 503 estima quanto tempo o serviço estará indisponível e num 429 indica quanto esperar antes de um novo pedido. É orientação, não contrato, e a MDN nota que o suporte entre clientes é desigual — mas o Googlebot respeita-o, o que já justifica defini-lo durante uma manutenção planeada.

Os códigos que vale a pena acertar e a que cada um o compromete
CódigoNomeA que o comprometeOnde falha
200OKO pedido teve êxito e o corpo é o resultadoDevolvido com uma mensagem de erro dentro do corpo, o que esconde a falha de caches, monitorização e rastreadores
301Movido permanentementeEste URL fica substituído de vez; atualize as suas ligaçõesUsado enquanto ainda se decide — os navegadores guardam-no com força em cache e clientes antigos transformam um POST redirecionado em GET
302EncontradoVá aqui por agora; continue a usar o URL originalUsado para uma mudança permanente, pelo que o URL antigo continua a absorver os sinais de posicionamento
304Não modificadoA sua cópia em cache continua válida; não há corpoEnviado fora de um pedido condicional, ou com um corpo que os clientes podem descartar
307Redireção temporáriaComo 302, mas o método e o corpo não devem mudarPouco escolhido, pelo que as redireções temporárias quebram em silêncio os fluxos baseados em POST
308Redireção permanenteComo 301, mas o método e o corpo não devem mudarEsquecido nos pontos de API, onde um 301 rebaixa em silêncio um POST para GET
401Não autenticadoNão foram apresentadas credenciais válidas; um cabeçalho WWW-Authenticate indica o que se esperaDevolvido a um utilizador já autenticado mas sem o direito — esse caso é 403
403ProibidoA identidade é aceite e a ação é recusada mesmo assimUsado como saco de tudo, o que convida os clientes a repetir uma autenticação que nunca ajudará
404Não encontradoNão há nada neste URL e o servidor não diz se é definitivoSubstituído por uma página simpática servida com 200, o soft 404 que mantém indexados URLs mortos
410DesaparecidoRetirado de propósito e não volta; cacheável por omissãoQuase nunca usado, mesmo quando a remoção foi intencional e o 404 fica aquém
429Demasiados pedidosFoi atingido um limite de taxa; o Retry-After indica quanto esperar antes de um novo pedidoEnviado sem Retry-After, deixando os clientes adivinhar e martelar o ponto de acesso
500Erro interno do servidorO servidor falhou e não tem nada mais específico a dizerDevolvido por um pedido incorreto do cliente, que pertence antes à gama 400
502Gateway inválidoUm proxy recebeu uma resposta inválida do servidor a que reencaminhouDepurado na aplicação, quando a falha está entre o proxy e o serviço de origem
503Serviço indisponívelTemporariamente incapaz de servir; o Retry-After estima quanto durará a indisponibilidadeSubstituído por um 500 durante manutenção planeada, pelo que os rastreadores tomam a paragem por uma falha real
Referência de códigos de estado HTTPPesquise e explore todos os códigos de estado HTTP padrão por classe, com o nome e uma descrição de uma linha.Experimentar a ferramenta

Perguntas frequentes

Uma migração de site deve usar 301 ou 308?
Para páginas que só são pedidas com GET, o 301 é o valor seguro e aquele que todos os rastreadores e proxies tratam há décadas. Recorra ao 308 em tudo o que possa receber POST, PUT ou DELETE — pontos de formulário, rotas de API, recetores de webhooks — porque é aí que um cliente a rebaixar o método em silêncio transforma uma redireção num corpo de pedido perdido. Nada impede usar ambos na mesma migração, rota a rota.
O que deve uma API devolver quando a validação falha?
Use 400 Bad Request quando o próprio pedido está malformado e o servidor não o consegue analisar — JSON partido, um cabeçalho obrigatório em falta. Use 422 Unprocessable Content quando a sintaxe está correta mas o conteúdo quebra as suas regras, como um corpo bem formado com uma data de fim anterior à de início. O que não deve devolver é um 500, que culpa o servidor por um erro do cliente e polui o seu orçamento de erros, nem um 200 com o problema descrito no corpo, que esconde a falha de todas as camadas entre si e quem chama.
Os 404 prejudicam o posicionamento?
Um 404 é uma resposta válida e honesta, e uma parte normal de qualquer site com algum tempo; uma página que já não existe deve dizê-lo. O dano vem dos substitutos. Um soft 404 — uma página simpática servida com estado 200 — mantém URLs mortos no índice e gasta orçamento de rastreio em nada. Redirecionar em bloco todas as páginas em falta para a homepage é o mesmo erro disfarçado de 301. Se a remoção foi deliberada e permanente, o 410 di-lo com clareza.

Artigos que podem interessar-lhe

Todos os guias
TutorialComo escrever uma expressão cron: cinco campos e a regra OU que ninguém mencionaMinuto, hora, dia do mês, mês, dia da semana. As armadilhas: um passo é um avanço dentro de um intervalo e não um período, e os dois campos de dia combinam-se com OU — pelo que 0 0 1 * 1 dispara no dia 1 e em todas as segundas-feiras.TutorialComo escrever um robots.txt: diretivas, correspondência e o que não consegue esconderQuatro diretivas, dois caracteres universais, um ficheiro na raiz do host. É uma instrução de rastreio e nada mais: não retira uma página dos resultados, não restringe o acesso e publica cada caminho que nele enumera.ExplicaçãoComo funcionam as permissões de ficheiro em Unix: ler 755 sem adivinharLeitura 4, escrita 2, execução 1, e cada um dos três dígitos descreve uma parte diferente. O que quase todas as explicações erram é o que o bit de execução faz num diretório: concede a passagem, não o direito de executar seja o que for.ComparaçãocamelCase, snake_case, kebab-case: qual usar, e porque raramente és tu a escolherAs convenções não são gosto. O hífen é o operador menos, pelo que kebab-case não pode ser um identificador na maioria das linguagens - e é exatamente por isso que o CSS e os URL o usam. Mais a ida e volta com siglas que corrompe nomes em silêncio, e a regra que a corrige.ExplicaçãoPonto e vírgula, tabulação, barra: escolher um delimitador que sobreviva à viagemPorque é a língua de quem lê que decide o delimitador, o que o conversor faz às aspas quando muda, o que é realmente a primeira linha sep=, e a contagem de células citadas na mesma exportação escrita de cinco maneiras.TutorialBases de regex: guia para principiantesUma expressão regular é um padrão para procurar texto. Eis os blocos — classes de caracteres, quantificadores e âncoras — com um exemplo.

Ferramentas relacionadas

Fontes

Detetaste um erro neste artigo?