Rede

Lista de Códigos de Status HTTP

Lista completa dos códigos de status HTTP (1xx-5xx) com significados, causas comuns e soluções para desenvolvedores. Inclui uma ferramenta de consulta: digite um número de código para ver os detalhes instantaneamente.

Tabela de Referência de Códigos de Status HTTP
Código Nome Significado Causas Comuns
1xx — Informativo
100 Continue (Continue) Indica que o servidor recebeu a parte inicial da solicitação e o cliente deve continuar enviando o restante. Retornado quando um cliente envia um cabeçalho Expect: 100-continue antes de um corpo de solicitação grande.
101 Switching Protocols (Switching Protocols) Indica que o servidor aceita a solicitação do cabeçalho Upgrade e está mudando para um protocolo diferente. Uma resposta normal observada ao estabelecer uma conexão WebSocket.
102 Processing (Processing) Indica que o servidor aceitou a solicitação e ainda está processando-a, sem uma resposta pronta ainda (WebDAV). Enviado para evitar tempos limite durante operações WebDAV de longa duração.
103 Early Hints (Early Hints) Envia cabeçalhos preliminares, como Link, antes da resposta final, permitindo que o navegador pré-carregue recursos. Adicionado por CDNs ou proxies reversos para acelerar o pré-carregamento de CSS/JS.
2xx — Sucesso
200 OK (OK) A resposta de sucesso mais comum, indicando que a solicitação foi processada com sucesso.
201 Created (Created) Indica que um novo recurso foi criado como resultado da solicitação. Retornado por APIs que criam recursos via POST; normalmente inclui um cabeçalho Location apontando para o novo recurso.
202 Accepted (Accepted) Indica que a solicitação foi aceita, mas o processamento ainda não foi concluído (processamento assíncrono). Usado por APIs assíncronas que apenas enfileiram trabalho, ou endpoints de recebimento para processamento em lote.
204 No Content (No Content) Indica que a solicitação foi bem-sucedida, mas não há conteúdo para retornar. Comum após um DELETE bem-sucedido, ou uma atualização PUT cujo design de API omite o corpo da resposta.
206 Partial Content (Partial Content) Indica que apenas parte do recurso foi retornada, com base no cabeçalho Range do cliente. Uma resposta normal para busca em vídeos ou downloads retomáveis.
3xx — Redirecionamento
301 Moved Permanently (Moved Permanently) Indica que o recurso foi movido permanentemente para uma nova URL; os motores de busca transferem os sinais de classificação para a nova URL. Usado para redirecionar URLs antigas após uma mudança na estrutura de URL ou migração de domínio.
302 Found (Found) Indica que o recurso está temporariamente em uma URL diferente. Movimentações permanentes devem usar 301 em vez disso. Comumente usado para roteamento temporário durante manutenção, ou redirecionamentos após login.
303 See Other (See Other) Indica que o resultado deve ser obtido com GET a partir de outra URL (o padrão Post-Redirect-Get). Usado após o envio de um formulário (POST) para evitar a caixa de diálogo de reenvio do navegador.
304 Not Modified (Not Modified) Indica que o recurso em cache não foi alterado, portanto o corpo não é reenviado. Retornado para solicitações condicionais usando If-None-Match / If-Modified-Since quando o cache ainda é válido.
307 Temporary Redirect (Temporary Redirect) Um redirecionamento temporário que, ao contrário do 302, preserva o método e o corpo originais ao reenviar. Usado em designs de API que precisam redirecionar solicitações POST/PUT preservando o corpo.
308 Permanent Redirect (Permanent Redirect) Um redirecionamento permanente que, ao contrário do 301, preserva o método e o corpo originais ao reenviar. Usado para migrações de versão de API que precisam de uma movimentação permanente preservando o método.
4xx — Erro do Cliente
400 Bad Request (Bad Request) Indica que a sintaxe ou os parâmetros da solicitação estão malformados e o servidor não consegue entendê-la. Normalmente causado por erros de sintaxe JSON, parâmetros obrigatórios ausentes ou incompatibilidades de tipo.
401 Unauthorized (Unauthorized) Indica credenciais de autenticação ausentes ou inválidas (apesar do nome, na verdade significa "não autenticado"). Frequentemente causado por um token expirado, um cabeçalho Authorization ausente, ou uma chave de API incorreta.
402 Payment Required (Payment Required) Reservado para uso futuro; às vezes usado para indicar que o pagamento é necessário. Algumas APIs reaproveitam isso para sinalizar limites de uso excedidos ou um plano de cobrança expirado.
403 Forbidden (Forbidden) Indica que o servidor entendeu a solicitação, mas se recusa a autorizá-la. Causas típicas incluem permissões insuficientes, restrições de IP, violações da política de CORS ou configurações incorretas de permissões de arquivo.
404 Not Found (Not Found) Indica que o recurso solicitado não pôde ser encontrado. Geralmente causado por uma rota não registrada, um erro de digitação na URL, ou o acesso a um recurso já excluído.
405 Method Not Allowed (Method Not Allowed) Indica que o recurso existe, mas o método HTTP especificado não é permitido nele. Normalmente acontece quando um POST é enviado para um endpoint somente-GET, ou uma incompatibilidade de método semelhante.
406 Not Acceptable (Not Acceptable) Indica que o servidor não pode produzir uma resposta que corresponda ao cabeçalho Accept do cliente. Ocorre quando um cliente solicita Accept: application/xml a uma API que retorna apenas JSON, por exemplo.
408 Request Timeout (Request Timeout) Indica que o servidor expirou o tempo limite esperando que o cliente concluísse a solicitação. Frequentemente causado por conexões lentas, uploads grandes, ou um cliente que trava no meio da solicitação.
409 Conflict (Conflict) Indica que a solicitação entra em conflito com o estado atual do recurso. Ocorre com falhas de bloqueio otimista durante edições concorrentes, ou tentativas de criar duplicatas.
410 Gone (Gone) Indica que o recurso foi removido permanentemente e não retornará (um sinal mais forte que o 404). Usado para informar explicitamente aos motores de busca que o conteúdo foi excluído e retirado intencionalmente.
413 Payload Too Large (Payload Too Large) Indica que o corpo da solicitação excede o tamanho que o servidor está disposto a aceitar. Geralmente causado por exceder um limite de tamanho de upload de arquivo, ou uma configuração insuficiente de tamanho do corpo no Nginx/PHP.
414 URI Too Long (URI Too Long) Indica que a URI da solicitação é mais longa do que o servidor está disposto a processar. Frequentemente acontece quando uma grande quantidade de dados é colocada em parâmetros de consulta GET.
415 Unsupported Media Type (Unsupported Media Type) Indica que o servidor não suporta o tipo de mídia do corpo da solicitação. Comum ao enviar Content-Type: text/plain para uma API JSON, ou configurações de cabeçalho semelhantes incorretas.
422 Unprocessable Entity (Unprocessable Entity) Indica que a sintaxe da solicitação é válida, mas a validação semântica falhou. Frequentemente usado para reportar erros de validação de formulário, como campos obrigatórios ausentes ou formatos inválidos.
425 Too Early (Too Early) Indica que o servidor se recusa a processar uma solicitação que poderia ser reproduzida devido ao risco de dados antecipados. Pode ser retornado como defesa contra ataques de repetição usando dados 0-RTT do TLS 1.3.
429 Too Many Requests (Too Many Requests) Indica que o cliente enviou solicitações demais dentro de uma determinada janela de tempo (limitação de taxa). Causado por exceder um limite de taxa da API; o cabeçalho Retry-After geralmente indica quanto tempo esperar antes de tentar novamente.
451 Unavailable For Legal Reasons (Unavailable For Legal Reasons) Indica que o conteúdo está indisponível devido a uma exigência legal, como uma ordem judicial. Retornado quando um provedor de conteúdo bloqueia o acesso devido a uma reclamação de direitos autorais ou regulamentação legal específica de um país.
5xx — Erro do Servidor
500 Internal Server Error (Internal Server Error) Indica que ocorreu um erro inesperado no servidor e a solicitação não pôde ser processada. As causas variam amplamente: exceções não tratadas na aplicação, configurações incorretas, falhas de conexão com o banco de dados, entre outras.
501 Not Implemented (Not Implemented) Indica que o servidor não suporta a funcionalidade necessária para atender à solicitação. Ocorre quando um método HTTP não implementado (por exemplo, PATCH) é enviado para uma implementação de servidor mais antiga.
502 Bad Gateway (Bad Gateway) Indica que um proxy ou gateway recebeu uma resposta inválida do servidor de origem. Normalmente causado pelo fato de o servidor de aplicação de origem estar fora do ar ou ter travado.
503 Service Unavailable (Service Unavailable) Indica que o servidor está temporariamente sobrecarregado ou em manutenção e não pode atender à solicitação. Principalmente causado por esgotamento de recursos sob carga pesada, ou uma janela de manutenção planejada.
504 Gateway Timeout (Gateway Timeout) Indica que um proxy ou gateway não recebeu uma resposta a tempo do servidor de origem. Frequentemente causado por processamento backend de longa duração, latência de rede, ou um servidor de origem que trava.
505 HTTP Version Not Supported (HTTP Version Not Supported) Indica que o servidor não suporta a versão do HTTP usada na solicitação. Ocorre quando um cliente antigo ou proxy mal configurado se comunica usando uma versão de HTTP inesperada.
507 Insufficient Storage (Insufficient Storage) Indica que o servidor não possui armazenamento suficiente para concluir a solicitação (WebDAV). Retornado quando uma operação de armazenamento de arquivos falha devido a espaço em disco insuficiente.
508 Loop Detected (Loop Detected) Indica que o servidor detectou um loop infinito ao processar a solicitação (WebDAV). Ocorre quando uma configuração de vinculação WebDAV contém uma referência circular.
511 Network Authentication Required (Network Authentication Required) Indica que o cliente precisa se autenticar para obter acesso à rede. Usado para redirecionar para uma página de login de portal cativo, como em Wi-Fi público.

Dicas

  • 404 e 410 parecem semelhantes, mas o 410 sinaliza explicitamente que o conteúdo foi removido intencionalmente e não voltará. Use o 410 para conteúdo sem substituto, enviando um sinal mais claro aos motores de busca.
  • 301 versus 308 e 302 versus 307 compartilham a mesma distinção "permanente versus temporário", mas 308 e 307 preservam o corpo POST original ao reenviar, ao contrário de 301 e 302.
  • Ao receber um 429 Too Many Requests, verifique o cabeçalho Retry-After e aguarde esse tempo antes de tentar novamente — insistir no endpoint mesmo assim pode fazer com que você seja bloqueado completamente.
  • Um erro 5xx sinaliza um problema do lado do servidor, não um bug na sua solicitação — verifique os logs do servidor e o status de disponibilidade antes de depurar o código do cliente.
  • A aba Rede das ferramentas de desenvolvedor do seu navegador colore os códigos de status de cada solicitação. Combinar isso com esta referência torna a depuração muito mais rápida.

Perguntas Frequentes

Ambos indicam que um recurso não foi encontrado, mas o 404 é um "não encontrado" genérico que pode ser temporário, enquanto o 410 sinaliza explicitamente que o recurso foi removido permanentemente e nunca retornará. Use o 410 para conteúdo excluído intencionalmente para enviar um sinal mais claro para o SEO.

Um redirecionamento 301 (permanente) transfere quase todos os sinais de classificação da URL antiga para a nova URL. Um redirecionamento 302 (temporário) diz aos motores de busca para continuarem tratando a URL antiga como canônica, portanto movimentações permanentes devem sempre usar o 301.

401 Unauthorized na verdade significa "não autenticado" — o cliente não comprovou quem é. 403 Forbidden significa que o cliente está autenticado, mas não tem permissão. Apesar dos nomes, o 401 trata da autenticação e o 403 da autorização.

Um 502 significa que um proxy reverso ou balanceador de carga recebeu uma resposta inválida do servidor de aplicação de origem. Comece verificando se o processo do servidor de aplicação está em execução e não travou.

Use a aba Rede das ferramentas de desenvolvedor do seu navegador, a opção -i do curl, ou digite o número do código na ferramenta de consulta desta página para ver seu significado.
ツールくん

Curiosidade — Breve história dos códigos de status HTTP

O sistema de códigos de status HTTP foi padronizado pela primeira vez na RFC 1945, a especificação do HTTP/1.0 publicada em 1996. O HTTP/1.1 (RFC 2616), lançado em 1999, estabeleceu a maior parte do sistema de códigos que usamos hoje, incluindo as famílias 4xx e 5xx, e desde então tem sido mantido através da RFC 7231 (2014) e da RFC 9110 (2022).

O famoso código de brincadeira 418 I'm a teapot se originou em uma RFC do Dia da Mentira de 1998, que descrevia o fictício "Hyper Text Coffee Pot Control Protocol" (HTCPCP). O código deveria ser retornado se você pedisse a um bule de chá para preparar café.

Acredita-se que o princípio de design em que o dígito inicial sinaliza uma categoria ampla influenciou sistemas de códigos de retorno posteriores em protocolos como SMTP e FTP. A simplicidade de "1xx = informativo, 2xx = sucesso" permaneceu essencialmente inalterada por quase três décadas.

451 Unavailable For Legal Reasons é uma adição relativamente recente, formalmente padronizada na RFC 7725 em 2015. O número 451 foi escolhido deliberadamente como uma referência ao romance distópico de Ray Bradbury "Fahrenheit 451", que trata sobre censura.