Referência baseada na RFC 9110 e no registro da IANA
Códigos de status HTTP
Um código de status HTTP é o número de três dígitos que o servidor coloca no início de toda resposta para dizer como o pedido terminou. O primeiro dígito é a classe: 1xx provisório, 2xx sucesso, 3xx redirecionamento, 4xx erro no pedido, 5xx falha do servidor.
Erros mais pesquisados
Os códigos que as pessoas mais procuram, normalmente porque uma página ou chamada de API acabou de falhar com um deles.
Como ler um código de status
Comece pelo primeiro dígito. A RFC 9110, seção 15, define cinco classes, e um cliente que não conhece um código específico deve tratá-lo como o x00 da mesma classe: um 437 desconhecido vira 400, um 599 vira 500. Por isso a classe diz mais sobre o próximo passo do que o número exato.
A classe também mostra de quem é a vez. Um 4xx coloca a correção do lado de quem fez o pedido: outra URL, credenciais válidas, um corpo menor, menos pedidos por minuto. Um 5xx coloca a correção no servidor ou em algo atrás dele, como uma aplicação que caiu ou um serviço que demorou demais, e o mesmo pedido pode funcionar um minuto depois.
Alguns números que aparecem nos logs nem estão no registro da IANA. O nginx grava 499 quando o cliente desiste antes da resposta ficar pronta e usa 444 para fechar a conexão sem responder. A Cloudflare devolve 520 a 526 quando não consegue uma resposta utilizável do seu servidor de origem. Eles ficam num grupo separado abaixo, para você saber quando está lendo uma convenção de fornecedor e quando está lendo o padrão.
A lista oficial é o registro de códigos de status HTTP da IANA. Todo código registrado que aparece na prática tem uma página própria aqui; ficam de fora o 104 (registro provisório para uploads retomáveis) e o 306 (reservado, sem uso desde o HTTP/1.1).
1xx Informativos
Respostas provisórias enviadas antes da resposta final. O pedido ainda está em andamento; o navegador lida com elas sem mostrar nada.
| Status | Significado |
|---|---|
| 100 Continue | Sinal verde provisório: os cabeçalhos foram aceitos, pode enviar o corpo. |
| 101 Switching Protocols | O servidor aceitou o Upgrade; a conexão passa a usar outro protocolo. |
| 102 Processing | Sinal de vida do WebDAV: pedido recebido, ainda processando, não desista. |
| 103 Early Hints | Cabeçalhos Link enviados antes da resposta final para o navegador adiantar downloads. |
2xx Sucesso
O servidor recebeu, entendeu e aceitou o pedido. O código específico diz o que aconteceu: conteúdo devolvido, recurso criado, tarefa enfileirada ou nada a devolver.
| Status | Significado |
|---|---|
| 200 OK | O pedido deu certo e o corpo da resposta traz o resultado. |
| 201 Created | Um novo recurso foi criado; o Location diz onde ele está. |
| 202 Accepted | Enfileirado para processamento; ainda não terminou e pode falhar. |
| 203 Non-Authoritative Information | Sucesso, mas um proxy alterou a resposta do servidor de origem. |
| 204 No Content | Sucesso, e de propósito não há corpo na resposta. |
| 205 Reset Content | Sucesso; limpe o formulário ou a tela que enviou o pedido. |
| 206 Partial Content | Só a faixa de bytes pedida no cabeçalho Range, não o arquivo inteiro. |
| 207 Multi-Status | Vários resultados num corpo só, cada um com o próprio status. |
| 208 Already Reported | Dentro de um 207: esta coleção já foi listada antes na resposta. |
| 226 IM Used | O corpo é um delta ou transformação do recurso, não a cópia inteira. |
3xx Redirecionamento
O cliente precisa dar mais um passo, geralmente seguir o cabeçalho Location para outra URL, ou reaproveitar a cópia que já tem em cache (304).
| Status | Significado |
|---|---|
| 300 Multiple Choices | Existem várias versões do recurso e o cliente deve escolher uma. |
| 301 Moved Permanently | Mudou de vez para a URL do Location; atualize links e favoritos. |
| 302 Found | Está temporariamente em outra URL; continue usando a original. |
| 303 See Other | Busque o resultado em outra URL com GET, normalmente depois de um POST. |
| 304 Not Modified | A cópia em cache continua válida; reaproveite. Vem sem corpo. |
| 305 Use Proxy | Obsoleto. Significava: repita o pedido pelo proxy indicado. |
| 307 Temporary Redirect | Está em outro lugar por enquanto; repita o mesmo pedido, mesmo método e corpo. |
| 308 Permanent Redirect | Mudou de vez; repita o pedido no Location com o mesmo método. |
4xx Erros do cliente
O problema está no pedido: URL errada, credenciais ausentes ou recusadas, dados inválidos, pedidos demais. Repetir o mesmo pedido traz a mesma resposta.
| Status | Significado |
|---|---|
| 400 Bad Request | O servidor não processa o pedido porque algo nele está malformado. |
| 401 Unauthorized | O pedido não tem credenciais válidas; faça login ou envie um token válido. |
| 402 Payment Required | Reservado pela especificação; na prática, um pagamento ou limite do plano bloqueia o pedido. |
| 403 Forbidden | O servidor entendeu o pedido e recusa; entrar de novo na conta não muda isso. |
| 404 Not Found | Não existe nada nesta URL, ou o servidor prefere não revelar que existe. |
| 405 Method Not Allowed | A URL existe, mas não aceita este método, como um POST numa página só de leitura. |
| 406 Not Acceptable | Nenhuma versão do recurso bate com os formatos ou idiomas que o cliente aceita. |
| 407 Proxy Authentication Required | Um proxy no caminho até o servidor exige credenciais antes de repassar o pedido. |
| 408 Request Timeout | O servidor parou de esperar porque o cliente demorou demais para enviar o pedido. |
| 409 Conflict | O pedido conflita com o estado atual do recurso, como um duplicado ou uma edição desatualizada. |
| 410 Gone | O recurso foi removido de propósito e não vai voltar. |
| 411 Length Required | O servidor recusa um corpo de requisição sem o cabeçalho Content-Length. |
| 412 Precondition Failed | Um cabeçalho condicional (If-Match, If-Unmodified-Since) deu falso no servidor. |
| 413 Content Too Large | O corpo do pedido (geralmente um upload) é maior do que o servidor aceita. |
| 414 URI Too Long | A URL, quase sempre a query string, é mais longa do que o servidor aceita ler. |
| 415 Unsupported Media Type | O servidor não aceita o formato do corpo informado em Content-Type ou Content-Encoding. |
| 416 Range Not Satisfiable | O intervalo de bytes do cabeçalho Range fica fora do arquivo. |
| 417 Expectation Failed | Um servidor no caminho não consegue atender o cabeçalho Expect do pedido. |
| 418 I'm a teapot | Uma piada de 1º de abril da RFC 2324, hoje reservada para ninguém reaproveitar. |
| 421 Misdirected Request | A conexão chegou a um servidor que não responde por este domínio. |
| 422 Unprocessable Content | O corpo está bem formado, mas os valores quebram as regras de validação. |
| 423 Locked | WebDAV: o arquivo ou pasta está bloqueado por outra pessoa. |
| 424 Failed Dependency | Não executado porque uma ação anterior do mesmo pedido falhou. |
| 425 Too Early | Recusado porque chegou em dados 0-RTT do TLS 1.3 e poderia ser repetido. |
| 426 Upgrade Required | Troque para o protocolo do cabeçalho Upgrade, muitas vezes WebSocket, e tente de novo. |
| 428 Precondition Required | Alterações precisam ser condicionais: envie If-Match com o ETag lido por último. |
| 429 Too Many Requests | Limite de taxa atingido: pedidos demais num intervalo. Espere e tente de novo. |
| 431 Request Header Fields Too Large | Cabeçalhos grandes demais, quase sempre por cookies em excesso ou enormes. |
| 451 Unavailable For Legal Reasons | Bloqueado por uma exigência legal, como ordem judicial ou pedido de remoção. |
5xx Erros do servidor
O pedido pode estar certo, mas o servidor, ou algo atrás dele, falhou. Muitas vezes é temporário, e pedidos idempotentes podem ser repetidos com espera crescente.
| Status | Significado |
|---|---|
| 500 Internal Server Error | Algo quebrou dentro do servidor enquanto ele processava o pedido. |
| 501 Not Implemented | O servidor não suporta esse método ou recurso em nenhum endereço. |
| 502 Bad Gateway | Um proxy ou gateway recebeu resposta inválida do servidor atrás dele. |
| 503 Service Unavailable | O servidor está temporariamente sobrecarregado ou em manutenção. |
| 504 Gateway Timeout | Um proxy desistiu de esperar a resposta do servidor atrás dele. |
| 505 HTTP Version Not Supported | O servidor recusa a versão principal do HTTP usada no pedido. |
| 506 Variant Also Negotiates | Erro de configuração da negociação: a variante escolhida também negocia. |
| 507 Insufficient Storage | O servidor não tem espaço para guardar o que o pedido exige. |
| 508 Loop Detected | O WebDAV entrou em laço infinito; em hospedagem compartilhada, a conta bateu no limite. |
| 510 Not Extended | Obsoleto: faltou no pedido uma extensão exigida pelo servidor (RFC 2774). |
| 511 Network Authentication Required | É preciso fazer login na rede (portal cativo) antes de navegar. |
4xx/5xx Códigos não oficiais (nginx, Cloudflare)
Não estão no registro da IANA, mas aparecem muito em logs e páginas de erro. O nginx usa 444 e 499 internamente; a Cloudflare usa 520 a 526 para indicar qual lado do proxy falhou.
| Status | Significado |
|---|---|
| 444 No Response | O nginx fechou a conexão sem devolver nada. |
| 499 Client Closed Request | O cliente desligou antes do nginx conseguir enviar a resposta. |
| 520 Web Server Returns an Unknown Error | A Cloudflare recebeu uma resposta vazia, malformada ou inesperada da origem. |
| 521 Web Server Is Down | A origem recusou a conexão da Cloudflare: servidor parado ou IPs bloqueados. |
| 522 Connection Timed Out | A conexão TCP da Cloudflare com a origem ficou sem resposta a tempo. |
| 523 Origin Is Unreachable | A Cloudflare não tem rota de rede até o IP da origem. |
| 524 A Timeout Occurred | A origem aceitou o pedido mas não respondeu dentro do timeout da Cloudflare. |
| 525 SSL Handshake Failed | O handshake TLS entre a Cloudflare e a origem falhou. |
| 526 Invalid SSL Certificate | O modo Full (strict) não conseguiu validar o certificado da origem. |
Perguntas frequentes
- Quais são as cinco classes de códigos de status HTTP?
- 1xx informativos (respostas provisórias como 100 Continue e 103 Early Hints), 2xx sucesso (200 OK, 201 Created, 204 No Content), 3xx redirecionamento (301, 302, 304, 307, 308), 4xx erros do cliente (400, 401, 403, 404, 429) e 5xx erros do servidor (500, 502, 503, 504).
- Onde os códigos de status HTTP são definidos oficialmente?
- Os principais estão na RFC 9110, HTTP Semantics (2022), seção 15. Outros vêm de RFCs próprias, como a RFC 6585 para 428, 429, 431 e 511, e a RFC 7725 para o 451. A IANA mantém a lista oficial no HTTP Status Code Registry.
- Qual a diferença entre erro 4xx e erro 5xx?
- Um 4xx significa que o servidor considera o pedido errado e repetir sem mudar nada vai falhar de novo. Um 5xx significa que o servidor, ou um serviço atrás dele, não conseguiu atender um pedido que pode estar perfeito, então tentar mais tarde pode dar certo.
- Como vejo o código de status de uma página?
- Abra as ferramentas de desenvolvedor do navegador, vá na aba Rede (Network) e recarregue: a coluna Status mostra o código de cada requisição. No terminal, curl -I https://exemplo.com mostra a linha de status e os cabeçalhos sem o corpo.
- Um servidor pode inventar seus próprios códigos de status?
- Tecnicamente qualquer número de 100 a 599 passa, e o cliente usa o significado da classe. Na prática, códigos inventados dão problema com proxies, bibliotecas e monitoramento. Prefira um código padrão e coloque os detalhes no corpo da resposta, por exemplo no formato problem details da RFC 9457.
Revisado em por Arielton Oberek.