Códigos de status HTTP — lista completa com significados e exemplos

Todos os códigos de status HTTP oficiais, de 100 a 511, mais os códigos do nginx, da Cloudflare e da AWS, com quando usar cada um.

91 códigos

1xx Informativo

100Continue

Resposta provisória: o servidor recebeu os cabeçalhos da requisição e o cliente pode prosseguir e enviar o corpo.

Quando usar

Enviado automaticamente pelos servidores quando o cliente inclui "Expect: 100-continue" antes de enviar um corpo grande, para que o cliente não desperdice banda com uma requisição que seria rejeitada.

Quando não usar

Não envie a partir do código da aplicação como status final; ele nunca é a resposta a uma requisição, só uma etapa antes da resposta real.

Cache

Não se aplica

Definido em

RFC 9110 §15.2.1

Exemplo
PUT /upload HTTP/1.1
Content-Length: 104857600
Expect: 100-continue

HTTP/1.1 100 Continue
101Switching Protocols

O servidor aceita trocar a conexão para o protocolo indicado no cabeçalho Upgrade.

Quando usar

A resposta do handshake de conexões WebSocket (Upgrade: websocket) e, historicamente, de upgrades de HTTP/1.1 para h2c.

Quando não usar

HTTP/2 e HTTP/3 não o usam; WebSockets sobre HTTP/2 usam o método CONNECT estendido (RFC 8441).

Cache

Não se aplica

Definido em

RFC 9110 §15.2.2

Exemplo
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
102ProcessingObsoleto

Resposta provisória que avisa o cliente de que o servidor ainda está trabalhando numa requisição WebDAV longa, para que ele não encerre por timeout.

WebDAV. Removido do WebDAV na RFC 4918, mas ainda presente no registro da IANA.

Quando usar

Só em servidores WebDAV legados que executam operações recursivas lentas, como um COPY ou MOVE profundo.

Quando não usar

APIs novas devem retornar 202 Accepted com uma URL de status para trabalhos demorados.

Cache

Não se aplica

Definido em

RFC 2518 §10.1

Exemplo
HTTP/1.1 102 Processing
103Early Hints

Resposta provisória com cabeçalhos Link para que o navegador comece a pré-carregar ou pré-conectar enquanto o servidor ainda prepara a resposta final.

Quando usar

Quando o HTML demora para ser gerado (renderização no servidor, consultas ao banco de dados) e você sabe de quais CSS, fontes ou origens a página precisa. Navegadores Chromium e o Firefox agem com base em dicas preload e preconnect em respostas 103; o Safari age com base em preconnect.

Quando não usar

Não coloque nele cabeçalhos que devem valer só para a resposta final, como Set-Cookie; os navegadores ignoram a maioria dos cabeçalhos em 103.

Cache

Não se aplica

Definido em

RFC 8297

Exemplo
HTTP/1.1 103 Early Hints
Link: </style.css>; rel=preload; as=style
Link: <https://cdn.example.com>; rel=preconnect

HTTP/1.1 200 OK
Content-Type: text/html
104Upload Resumption Supported

Resposta provisória que avisa o cliente de que o upload iniciado pode ser retomado depois, e onde.

Registro temporário na IANA para o rascunho da IETF de uploads retomáveis; ainda não é uma RFC final.

Quando usar

Experimental: servidores que implementam o rascunho de uploads retomáveis o enviam com um cabeçalho Location para o recurso de upload.

Quando não usar

Não é para uso geral até o rascunho ser publicado como RFC; a maioria dos clientes e proxies não o conhece.

Cache

Não se aplica

Definido em

draft-ietf-httpbis-resumable-upload

Exemplo
HTTP/1.1 104 Upload Resumption Supported
Upload-Draft-Interop-Version: 6
Location: https://example.com/upload/b530ce8ff

2xx Sucesso

200OKArmazenável em cache por padrão

A requisição foi bem-sucedida. O que o corpo contém depende do método: o recurso, no GET; o resultado da ação, no POST.

Quando usar

A resposta normal de sucesso para GET, e para POST, PUT, PATCH ou DELETE quando você retorna um corpo descrevendo o resultado.

Quando não usar

Não retorne 200 com uma mensagem de erro no corpo ("soft errors"). Clientes, monitoramento, caches e mecanismos de busca leem o código de status, não o seu JSON.

Cache

Armazenável em cache por padrão (cache heurístico)

Definido em

RFC 9110 §15.3.1

Exemplo
HTTP/1.1 200 OK
Content-Type: application/json

{"id": 42, "name": "Ada"}
201Created

A requisição foi bem-sucedida e criou um ou mais recursos novos.

Quando usar

Depois de um POST (ou de um PUT para uma URL nova) que cria algo. Inclua um cabeçalho Location apontando para o novo recurso; o corpo geralmente o descreve.

Quando não usar

Não use quando nada novo foi criado, por exemplo na atualização de um registro existente (use 200 ou 204).

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.3.2

Exemplo
HTTP/1.1 201 Created
Location: /users/42
Content-Type: application/json

{"id": 42}
202Accepted

A requisição foi aceita para processamento, mas o processamento não terminou e ainda pode falhar.

Quando usar

Trabalho enfileirado ou assíncrono: codificação de vídeo, geração de relatórios, importações em massa. Retorne um link onde o cliente possa consultar o status do job.

Quando não usar

Não use para indicar "sucesso" em trabalho síncrono; ele explicitamente não promete nada sobre o resultado.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.3.3

Exemplo
HTTP/1.1 202 Accepted
Location: /jobs/7f3a
Content-Type: application/json

{"status": "queued"}
203Non-Authoritative InformationArmazenável em cache por padrão

Sucesso, mas um proxy de transformação modificou a resposta 200 do servidor de origem.

Quando usar

Só por intermediários que alteram o conteúdo, como um proxy que comprime imagens ou reescreve HTML, para avisar o cliente de que essa não é a resposta exata da origem.

Quando não usar

Servidores de origem e APIs não devem enviá-lo.

Cache

Armazenável em cache por padrão (cache heurístico)

Definido em

RFC 9110 §15.3.4

Exemplo
HTTP/1.1 203 Non-Authoritative Information
Content-Type: image/webp
204No ContentArmazenável em cache por padrão

Sucesso, e intencionalmente não há corpo.

Quando usar

DELETE bem-sucedido, PUT ou PATCH quando você não retorna o recurso atualizado, salvamento automático de formulário ou resposta a um preflight CORS.

Quando não usar

Nunca inclua um corpo; os clientes não vão lê-lo, e no HTTP/1.1 um corpo indevido corrompe a próxima resposta na conexão. Use 200 se você tem algo a retornar.

Cache

Armazenável em cache por padrão (cache heurístico)

Definido em

RFC 9110 §15.3.5

Exemplo
HTTP/1.1 204 No Content
205Reset Content

Sucesso; o cliente deve redefinir a visualização do documento, por exemplo limpar o formulário enviado.

Quando usar

Interfaces de entrada de dados em que o usuário envia um formulário e logo em seguida digita outro registro.

Quando não usar

Os navegadores não implementam o comportamento de redefinição, então na prática ele funciona como 204. Não pode incluir corpo.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.3.6

Exemplo
HTTP/1.1 205 Reset Content
206Partial ContentArmazenável em cache por padrão

O servidor está retornando só o(s) intervalo(s) de bytes que o cliente pediu com um cabeçalho Range.

Quando usar

Busca em vídeo e áudio, downloads retomáveis e gerenciadores de download que baixam um arquivo em partes paralelas. Inclua Content-Range.

Quando não usar

Não envie, a menos que a requisição tenha um cabeçalho Range que você está atendendo. Se você ignorar o Range, envie 200 com o corpo inteiro.

Cache

Armazenável em cache por padrão (cache heurístico)

Definido em

RFC 9110 §15.3.7

Exemplo
GET /video.mp4 HTTP/1.1
Range: bytes=0-1023

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1023/146515
Content-Length: 1024
207Multi-Status

O corpo (XML) contém um status separado para cada um de vários recursos.

WebDAV

Quando usar

Operações WebDAV, como PROPFIND, que agem sobre muitos recursos. Algumas APIs JSON o usam em endpoints de lote.

Quando não usar

Em APIs de lote, muitas equipes preferem 200 com resultados por item, já que clientes genéricos tratam 207 como sucesso simples.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 4918 §11.1

Exemplo
HTTP/1.1 207 Multi-Status
Content-Type: application/xml; charset="utf-8"
208Already Reported

Usado dentro de uma resposta 207 para dizer que um recurso já foi listado antes e por isso não é repetido (evita loops com bindings).

WebDAV

Quando usar

Servidores WebDAV com suporte a bindings (RFC 5842).

Quando não usar

Não tem significado como resposta principal fora do WebDAV.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 5842 §7.1

Exemplo
<D:status>HTTP/1.1 208 Already Reported</D:status>
226IM Used

O servidor atendeu um GET com um delta (manipulação de instância) aplicado ao recurso atual, em vez do recurso completo.

Quando usar

Codificação delta para HTTP (cabeçalhos A-IM / IM). Raramente implantado.

Quando não usar

Não é suportado pelos navegadores; não use em APIs comuns.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 3229 §10.4.1

Exemplo
HTTP/1.1 226 IM Used
IM: vcdiff
ETag: "v2"

3xx Redirecionamento

300Multiple ChoicesArmazenável em cache por padrão

O recurso tem várias representações e o cliente (ou o usuário) deve escolher uma.

Quando usar

Raro: negociação de conteúdo conduzida pelo agente, por exemplo oferecer um documento em vários idiomas ou formatos com links para cada um.

Quando não usar

Os navegadores não escolhem automaticamente. Para escolher idioma ou formato, a negociação no servidor ou uma página normal com links funcionam melhor.

Cache

Armazenável em cache por padrão (cache heurístico)

Definido em

RFC 9110 §15.4.1

Exemplo
HTTP/1.1 300 Multiple Choices
Link: </doc.en.html>; rel=alternate; hreflang=en
Link: </doc.fr.html>; rel=alternate; hreflang=fr
301Moved PermanentlyArmazenável em cache por padrão

O recurso tem uma nova URL permanente, informada no cabeçalho Location.

Quando usar

Mudanças de domínio, HTTP para HTTPS, slugs alterados, consolidação de URLs duplicadas. Os mecanismos de busca transferem os sinais de ranqueamento para a nova URL.

Quando não usar

Os navegadores podem trocar POST por GET ao seguir um 301. Se o método precisa ser mantido (um endpoint de API que mudou), use 308. Os navegadores armazenam 301 em cache de forma agressiva, então teste antes de publicar.

Cache

Armazenável em cache por padrão (cache heurístico)

Definido em

RFC 9110 §15.4.2

Exemplo
HTTP/1.1 301 Moved Permanently
Location: https://www.example.com/new-page
302Found

O recurso está temporariamente em outra URL; continue usando a URL original no futuro.

Quando usar

Redirecionamentos temporários: redirecionamento de login, testes A/B, páginas de manutenção, redirecionamentos por localização ou idioma.

Quando não usar

Os navegadores trocam POST por GET ao seguir um 302 (comportamento histórico que a RFC permite). Use 303 para “vá ver o resultado” depois de um POST e 307 quando o método precisa ser preservado.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.4.3

Exemplo
HTTP/1.1 302 Found
Location: /login?next=%2Faccount
303See Other

Redireciona o cliente para outra URL, que ele deve buscar com GET.

Quando usar

O padrão Post/Redirect/Get: depois de um POST de formulário, envie 303 para a página de resultado, para que atualizar a página não reenvie o formulário.

Quando não usar

Não serve para conteúdo que mudou de lugar; ele não diz nada sobre a URL original ter mudado.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.4.4

Exemplo
HTTP/1.1 303 See Other
Location: /orders/1234
304Not Modified

Resposta a um GET ou HEAD condicional (If-None-Match ou If-Modified-Since): a cópia em cache do cliente ainda é válida.

Revalidação de cache: não é armazenado em si, mas atualiza a resposta em cache que o cliente já tem.

Quando usar

Enviado automaticamente por servidores e CDNs quando o ETag ou a data Last-Modified coincidem, evitando transferir de novo um corpo inalterado.

Quando não usar

Nunca envie corpo. Não envie em resposta a uma requisição que não era condicional; o cliente não tem nada para reutilizar.

Cache

Não se aplica

Definido em

RFC 9110 §15.4.5

Exemplo
GET /app.js HTTP/1.1
If-None-Match: "33a64df5"

HTTP/1.1 304 Not Modified
ETag: "33a64df5"
Cache-Control: max-age=3600
305Use ProxyObsoleto

Obsoleto. Antigamente dizia ao cliente para repetir a requisição por meio de um proxy indicado em Location.

Quando usar

Nada. Foi descontinuado por motivos de segurança e os navegadores o ignoram.

Quando não usar

Não envie.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.4.6

Exemplo
HTTP/1.1 305 Use Proxy
306(Unused)Obsoleto

Reservado. Foi usado num rascunho para "Switch Proxy" e não é mais usado.

Quando usar

Nada.

Quando não usar

Não envie.

Cache

Não se aplica

Definido em

RFC 9110 §15.4.7

307Temporary Redirect

Redirecionamento temporário em que o cliente deve repetir a requisição com o mesmo método e corpo.

Quando usar

Redirecionar temporariamente requisições POST, PUT ou DELETE (um endpoint de API movido para manutenção). Os navegadores também mostram um 307 interno quando o HSTS força o HTTPS.

Quando não usar

Para uma mudança permanente, use 308. Para "vá buscar o resultado com GET", use 303.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.4.8

Exemplo
HTTP/1.1 307 Temporary Redirect
Location: https://api2.example.com/v1/orders
308Permanent RedirectArmazenável em cache por padrão

Redirecionamento permanente em que o cliente deve repetir a requisição com o mesmo método e corpo.

Quando usar

Um endpoint de API movido permanentemente que recebe POST ou PUT. Os mecanismos de busca o tratam como 301. O Next.js e a Vercel usam 308 para redirecionamentos permanentes por padrão.

Quando não usar

Clientes muito antigos (Internet Explorer no Windows 7 e anteriores) não o entendem; para simples mudanças de página, 301 funciona igualmente bem.

Cache

Armazenável em cache por padrão (cache heurístico)

Definido em

RFC 9110 §15.4.9

Exemplo
HTTP/1.1 308 Permanent Redirect
Location: https://example.com/api/v2/upload

4xx Erro do cliente

400Bad Request

O servidor não vai processar a requisição por causa de um erro do cliente: sintaxe malformada, enquadramento inválido ou parâmetros inválidos.

Quando usar

JSON impossível de interpretar, um parâmetro obrigatório ausente, um valor do tipo errado. Explique o problema no corpo (problem+json da RFC 9457 é um bom formato).

Quando não usar

Para entrada bem formada que viola regras de negócio, muitas APIs usam 422. Para problemas de autenticação, use 401 ou 403.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.1

Exemplo
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json

{"title": "Invalid JSON", "detail": "Unexpected token } at position 41"}
401Unauthorized

A requisição não tem credenciais de autenticação válidas. Apesar do nome, significa "não autenticado".

Quando usar

Sem token, token expirado ou senha errada. A resposta precisa incluir um cabeçalho WWW-Authenticate descrevendo como se autenticar.

Quando não usar

Se o usuário está logado mas não tem permissão, use 403. Não envie 401 sem WWW-Authenticate.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.2

Exemplo
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="api", error="invalid_token"
402Payment Required

Reservado para uso futuro. Não há semântica padrão.

Quando usar

Algumas APIs o usam para "cota esgotada, faça upgrade do plano" ou para pagamento recusado (a Stripe retorna 402 quando o cartão é recusado).

Quando não usar

Não conte com os clientes entendendo o código; descreva o problema no corpo.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.3

Exemplo
HTTP/1.1 402 Payment Required
Content-Type: application/json

{"error": "card_declined"}
403Forbidden

O servidor entendeu a requisição e sabe quem você é (ou não se importa), mas se recusa a atendê-la.

Quando usar

O usuário autenticado não tem permissão, um IP está bloqueado, a listagem de diretórios está desativada ou uma regra de WAF foi acionada. Autenticar de novo não vai ajudar.

Quando não usar

Se as credenciais estão ausentes ou são inválidas, use 401. Se revelar que o recurso existe já é um vazamento, retorne 404.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.4

Exemplo
HTTP/1.1 403 Forbidden
Content-Type: application/json

{"error": "You do not have access to this project"}
404Not FoundArmazenável em cache por padrão

O servidor não tem uma representação atual para a URL, ou não vai dizer se ela existe.

Quando usar

URLs desconhecidas, registros excluídos quando você não rastreia exclusões, ou para esconder recursos de usuários sem autorização.

Quando não usar

Se o recurso existia e sumiu de vez, o 410 diz isso explicitamente. Não retorne uma página 200 que diz "não encontrado" (um soft 404).

Cache

Armazenável em cache por padrão (cache heurístico)

Definido em

RFC 9110 §15.5.5

Exemplo
HTTP/1.1 404 Not Found
Content-Type: text/html
405Method Not AllowedArmazenável em cache por padrão

A URL existe, mas não aceita este método HTTP.

Quando usar

Um DELETE num recurso somente leitura ou um POST numa página que só aceita GET. A resposta precisa incluir um cabeçalho Allow listando os métodos aceitos.

Quando não usar

Não use para problemas de permissão (403) nem para métodos que o servidor não implementa de forma alguma (501).

Cache

Armazenável em cache por padrão (cache heurístico)

Definido em

RFC 9110 §15.5.6

Exemplo
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD
406Not Acceptable

O servidor não consegue gerar uma resposta compatível com os cabeçalhos Accept, Accept-Language ou Accept-Encoding da requisição.

Quando usar

Uma API que só fala JSON recebendo "Accept: application/xml" sem alternativa.

Quando não usar

A maioria dos servidores ignora cabeçalhos Accept incompatíveis e envia o formato padrão, o que costuma ser mais amigável.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.7

Exemplo
HTTP/1.1 406 Not Acceptable
Content-Type: application/json

{"supported": ["application/json"]}
407Proxy Authentication Required

Como o 401, mas o cliente precisa se autenticar no proxy intermediário.

Quando usar

Enviado por proxies de encaminhamento (proxies corporativos), com um cabeçalho Proxy-Authenticate.

Quando não usar

Servidores de origem nunca devem enviá-lo.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.8

Exemplo
HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: Basic realm="corp-proxy"
408Request Timeout

O servidor não recebeu uma requisição completa no tempo que estava disposto a esperar e está fechando a conexão.

Quando usar

Enviado por servidores em conexões keep-alive ociosas ou uploads lentos. Os clientes podem repetir a requisição numa nova conexão.

Quando não usar

Não é para processamento lento no back-end; isso é um 504 num gateway ou simplesmente uma resposta lenta. Envie "Connection: close" junto.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.9

Exemplo
HTTP/1.1 408 Request Timeout
Connection: close
409Conflict

A requisição entra em conflito com o estado atual do recurso.

Quando usar

Criar um usuário cujo e-mail já existe, editar um registro que outra pessoa alterou (versão diferente), excluir uma pasta que não está vazia.

Quando não usar

Para condições If-Match / If-Unmodified-Since que falharam, use 412. Para erros de validação, use 400 ou 422.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.10

Exemplo
HTTP/1.1 409 Conflict
Content-Type: application/json

{"error": "Email already registered"}
410GoneArmazenável em cache por padrão

O recurso existia aqui, foi removido permanentemente e não tem endereço de redirecionamento.

Quando usar

Produtos descontinuados, promoções encerradas, contas excluídas, versões de API aposentadas. O Google trata 404 e 410 quase da mesma forma, mas um 410 pode sair do índice um pouco antes.

Quando não usar

Se o conteúdo mudou de lugar, redirecione com 301. Se você não tem certeza de que é permanente, use 404.

Cache

Armazenável em cache por padrão (cache heurístico)

Definido em

RFC 9110 §15.5.11

Exemplo
HTTP/1.1 410 Gone
411Length Required

O servidor exige um cabeçalho Content-Length nesta requisição.

Quando usar

Servidores que recusam uploads em chunks e precisam saber o tamanho do corpo com antecedência.

Quando não usar

Raramente necessário nas aplicações; geralmente é emitido pelo próprio servidor web.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.12

Exemplo
HTTP/1.1 411 Length Required
412Precondition Failed

Uma condição nos cabeçalhos da requisição (If-Match, If-Unmodified-Since, If-None-Match numa escrita) resultou em falso.

Quando usar

Concorrência otimista: o cliente enviou If-Match com um ETag antigo, ou seja, outra pessoa alterou o recurso antes.

Quando não usar

Não use para falhas de regra de negócio que não têm nada a ver com cabeçalhos condicionais (409 ou 422).

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.13

Exemplo
PUT /docs/7 HTTP/1.1
If-Match: "v3"

HTTP/1.1 412 Precondition Failed
ETag: "v4"
413Content Too Large

O corpo da requisição é maior do que o servidor aceita processar. Chamado de "Payload Too Large" antes da RFC 9110.

Quando usar

Uploads acima do limite (client_max_body_size do nginx, um teto de 10 MB numa API). Se o limite for temporário, adicione Retry-After.

Quando não usar

Para uma URL longa demais, use 414; para cabeçalhos grandes demais, use 431.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.14

Exemplo
HTTP/1.1 413 Content Too Large
Connection: close
414URI Too LongArmazenável em cache por padrão

O alvo da requisição (URL) é mais longo do que o servidor aceita interpretar.

Quando usar

Query strings enormes, muitas vezes um formulário GET que deveria ser POST, ou um loop de redirecionamento que continua acrescentando parâmetros.

Quando não usar

Leve entradas grandes para o corpo da requisição (POST) em vez de aumentar o limite indefinidamente.

Cache

Armazenável em cache por padrão (cache heurístico)

Definido em

RFC 9110 §15.5.15

Exemplo
HTTP/1.1 414 URI Too Long
415Unsupported Media Type

O servidor recusa a requisição porque o formato do corpo (Content-Type ou Content-Encoding) não é aceito.

Quando usar

Um endpoint que aceita JSON recebendo dados de formulário ou XML, ou a falta do cabeçalho Content-Type. Inclua Accept-Post ou Accept-Patch para mostrar o que é aceito.

Quando não usar

Não serve para um corpo no formato certo com conteúdo inválido (400 ou 422).

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.16

Exemplo
HTTP/1.1 415 Unsupported Media Type
Accept-Post: application/json
416Range Not Satisfiable

Nenhum dos intervalos de bytes do cabeçalho Range se sobrepõe ao recurso, por exemplo ao pedir bytes além do fim do arquivo.

Quando usar

Downloads retomados em que o arquivo diminuiu ou o cliente pede além do fim. Inclua Content-Range: bytes */<length>.

Quando não usar

Os servidores podem simplesmente ignorar um Range inválido e retornar 200 com o corpo inteiro, o que também é permitido.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.17

Exemplo
HTTP/1.1 416 Range Not Satisfiable
Content-Range: bytes */47022
417Expectation Failed

O servidor não consegue atender à exigência do cabeçalho Expect da requisição.

Quando usar

Um cliente enviou "Expect: 100-continue" a um servidor ou proxy que não o suporta, ou uma expectativa desconhecida.

Quando não usar

Clientes que o recebem devem repetir a requisição sem o cabeçalho Expect.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.18

Exemplo
HTTP/1.1 417 Expectation Failed
418(Unused)

Reservado pela RFC 9110 porque o 418 foi amplamente implantado como o código de piada “I’m a teapot”; ele não tem significado definido no HTTP.

Reservado. Famoso como “I’m a teapot” (sou um bule de chá), da RFC 2324 de primeiro de abril de 1998 (HTCPCP).

Quando usar

Só como easter egg. Alguns serviços o usam para responder com humor a requisições que querem rejeitar.

Quando não usar

Não use para erros reais; ele não pode receber um significado e os clientes não vão saber o que fazer.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.19

Exemplo
HTTP/1.1 418 I'm a teapot
419Page ExpiredNão oficial · Laravel

O Laravel o retorna quando o token CSRF está ausente ou expirou, geralmente depois que a sessão expirou numa página com formulário.

Quando usar

Enviado pelo middleware CSRF do Laravel. Resolva atualizando a página, incluindo @csrf nos formulários ou enviando o cabeçalho X-CSRF-TOKEN nas requisições AJAX.

Quando não usar

Não é um código padrão; não o envie a partir de APIs que não usam Laravel.

Cache

Não se aplica

Definido em

Laravel (fora do registro da IANA)

Exemplo
HTTP/1.1 419 unknown status
420Enhance Your CalmNão oficial · Twitter (legado)

A resposta de limite de taxa da antiga API do Twitter, substituída pelo 429 padrão.

Quando usar

Nada novo. Você ainda pode encontrá-lo em bibliotecas de cliente antigas. O Spring já definiu 420 "Method Failure", hoje obsoleto.

Quando não usar

Use 429 para limitação de taxa.

Cache

Não se aplica

Definido em

Twitter API v1 (fora do registro da IANA)

Exemplo
HTTP/1.1 420 Enhance Your Calm
421Misdirected Request

A requisição chegou a um servidor que não consegue gerar uma resposta para aquele host e esquema.

Quando usar

A reutilização de conexões HTTP/2 deu errado: o navegador reaproveitou uma conexão para outro nome de host coberto pelo mesmo certificado, mas o servidor não o atende. O cliente deve tentar de novo numa nova conexão.

Quando não usar

Não serve para nomes de host desconhecidos comuns num único servidor; isso geralmente é um 404 ou o host virtual padrão.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.20

Exemplo
HTTP/2 421
422Unprocessable Content

A requisição está bem formada e num formato aceito, mas o conteúdo não passa na validação. Chamado de "Unprocessable Entity" na RFC 4918.

Quando usar

Erros de validação de formulários e APIs: um e-mail que não é e-mail, uma data final antes da data inicial. Rails, Laravel e FastAPI o usam por padrão.

Quando não usar

Para sintaxe malformada (JSON impossível de interpretar), use 400.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.21

Exemplo
HTTP/1.1 422 Unprocessable Content
Content-Type: application/json

{"errors": {"email": ["is invalid"]}}
423Locked

O recurso está bloqueado, então a requisição não pode alterá-lo.

WebDAV

Quando usar

Semântica de LOCK do WebDAV. Algumas APIs o usam para registros em edição por outra pessoa ou contas bloqueadas após tentativas de login malsucedidas.

Quando não usar

Fora do WebDAV, o 409 é mais bem compreendido por clientes genéricos.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 4918 §11.3

Exemplo
HTTP/1.1 423 Locked
424Failed Dependency

A ação falhou porque outra ação da qual ela dependia falhou.

WebDAV

Quando usar

Num PROPPATCH do WebDAV ou numa requisição em lote, itens que não foram tentados porque um item anterior falhou.

Quando não usar

Não é para falhas de serviços upstream; essas são 502 ou 503.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 4918 §11.4

Exemplo
HTTP/1.1 424 Failed Dependency
425Too Early

O servidor não vai processar uma requisição enviada em early data do TLS 1.3 (0-RTT) porque ela pode ser repetida (replay).

Quando usar

CDNs e servidores que aceitam 0-RTT, mas rejeitam requisições não idempotentes (POST) em early data. O cliente tenta de novo depois que o handshake termina.

Quando não usar

Não é um código genérico de "tente mais tarde"; para isso, use 503 com Retry-After.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 8470 §5.2

Exemplo
HTTP/1.1 425 Too Early
426Upgrade Required

O servidor recusa a requisição no protocolo atual, mas a aceitaria após um upgrade indicado no cabeçalho Upgrade.

Quando usar

Exigir TLS ou um protocolo mais novo, ou um endpoint WebSocket acessado com uma requisição HTTP comum. Precisa incluir um cabeçalho Upgrade.

Quando não usar

Para HTTP para HTTPS em sites, o caminho usual é um redirecionamento 301 ou 308 mais HSTS.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.5.22

Exemplo
HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.3, HTTP/1.1
Connection: Upgrade
428Precondition Required

O servidor exige que a requisição seja condicional (If-Match etc.), para evitar atualizações perdidas.

Quando usar

APIs que exigem que os clientes enviem If-Match com o último ETag que viram antes de um PUT, PATCH ou DELETE.

Quando não usar

Use 412 quando uma pré-condição foi enviada e falhou; o 428 é para quando nenhuma foi enviada.

Cache

Não pode ser armazenado por caches

Definido em

RFC 6585 §3

Exemplo
HTTP/1.1 428 Precondition Required
Content-Type: application/json

{"error": "Send If-Match with the current ETag"}
429Too Many Requests

O cliente enviou requisições demais num determinado intervalo de tempo (rate limiting).

Quando usar

Limites de taxa de APIs, limitação de tentativas de login, proteção contra scraping. Inclua Retry-After para que clientes bem-comportados saibam quando voltar; cabeçalhos RateLimit também ajudam.

Quando não usar

Para um servidor sobrecarregado para todos, use 503. O Googlebot trata 429 como 503 e reduz o ritmo de rastreamento.

Cache

Não pode ser armazenado por caches

Definido em

RFC 6585 §4

Exemplo
HTTP/1.1 429 Too Many Requests
Retry-After: 60
Content-Type: application/json

{"error": "Rate limit exceeded: 100 requests per minute"}
431Request Header Fields Too Large

Os cabeçalhos, individualmente ou em conjunto, são grandes demais para o servidor.

Quando usar

Geralmente cookies grandes demais acumulados num domínio, ou tokens Authorization enormes. Limpar os cookies muitas vezes resolve para os usuários.

Quando não usar

Para uma URL longa, use 414; para um corpo grande, use 413.

Cache

Não pode ser armazenado por caches

Definido em

RFC 6585 §5

Exemplo
HTTP/1.1 431 Request Header Fields Too Large
440Login Time-outNão oficial · Microsoft IIS / Exchange

A sessão do cliente expirou e ele precisa fazer login de novo (Outlook Web Access e outros apps no IIS).

Quando usar

Visto em ambientes Exchange/OWA.

Quando não usar

Use 401 para sessões expiradas nos seus próprios apps.

Cache

Não se aplica

Definido em

Microsoft IIS (fora do registro da IANA)

Exemplo
HTTP/1.1 440 Login Time-out
444No ResponseNão oficial · nginx

Código interno do nginx: "return 444;" fecha a conexão sem enviar resposta alguma.

Quando usar

Descartar requisições de scanners, requisições com cabeçalhos Host desconhecidos num bloco server padrão ou clientes abusivos. Aparece nos logs do nginx; o cliente vê uma resposta vazia.

Quando não usar

O cliente nunca recebe um 444, então não é algo a tratar no código do cliente.

Cache

Não se aplica

Definido em

nginx (fora do registro da IANA)

Exemplo
server {
  listen 80 default_server;
  return 444;
}
449Retry WithNão oficial · Microsoft

Extensão da Microsoft: a requisição deve ser repetida depois que o cliente executar uma ação específica.

Quando usar

Visto em alguns serviços da Microsoft (Exchange ActiveSync; o Azure Cosmos DB usa 449 para conflitos de escrita que podem ser repetidos).

Quando não usar

Não é padrão; use 409 ou 503 com Retry-After nas suas próprias APIs.

Cache

Não se aplica

Definido em

Microsoft IIS (fora do registro da IANA)

Exemplo
HTTP/1.1 449 Retry With
450Blocked by Windows Parental ControlsNão oficial · Microsoft

O Controle dos Pais do Windows bloqueou o acesso à página.

Quando usar

Gerado em sistemas Windows com controle dos pais.

Quando não usar

Não o envie a partir de servidores.

Cache

Não se aplica

Definido em

Microsoft (fora do registro da IANA)

Exemplo
HTTP/1.1 450 Blocked by Windows Parental Controls
451Unavailable For Legal ReasonsArmazenável em cache por padrão

O acesso é negado por exigência legal: ordem judicial, censura governamental ou restrição geográfica por motivos legais.

Quando usar

Conteúdo bloqueado numa jurisdição (sanções, bloqueios geográficos ligados ao GDPR, ordens de remoção). Um cabeçalho Link com rel="blocked-by" pode indicar quem impôs o bloqueio.

Quando não usar

Não é para negações de permissão comuns (403) nem para conteúdo que você simplesmente decidiu remover (410).

Cache

Armazenável em cache por padrão (cache heurístico)

Definido em

RFC 7725 §3

Exemplo
HTTP/1.1 451 Unavailable For Legal Reasons
Link: <https://authority.example/>; rel="blocked-by"
460Client closed connection (AWS ELB)Não oficial · AWS Application Load Balancer

Registrado por um AWS ALB quando o cliente fechou a conexão antes do fim do timeout de ociosidade.

Quando usar

Visto nos logs de acesso do ALB; geralmente um cliente com timeout menor que o tempo de processamento do destino.

Quando não usar

Não é enviado aos clientes.

Cache

Não se aplica

Definido em

AWS Elastic Load Balancing (fora do registro da IANA)

Exemplo
elb_status_code=460
463Too many IPs in X-Forwarded-For (AWS ELB)Não oficial · AWS Application Load Balancer

O ALB recebeu um cabeçalho X-Forwarded-For com mais de 30 endereços IP.

Quando usar

Geralmente um loop de proxy que continua acrescentando endereços.

Quando não usar

Não é para uso em aplicações.

Cache

Não se aplica

Definido em

AWS Elastic Load Balancing (fora do registro da IANA)

Exemplo
HTTP/1.1 463
494Request Header Too LargeNão oficial · nginx

Código interno do nginx para cabeçalhos que excedem large_client_header_buffers; o cliente recebe um 400.

Quando usar

Aparece nos logs do nginx e na configuração de error_page.

Quando não usar

O código padrão é 431.

Cache

Não se aplica

Definido em

nginx (fora do registro da IANA)

Exemplo
error_page 494 /header-too-large.html;
495SSL Certificate ErrorNão oficial · nginx

Interno do nginx: o cliente apresentou um certificado de cliente inválido (TLS mútuo). Enviado ao cliente como 400.

Quando usar

Páginas de erro personalizadas para falhas de mTLS.

Quando não usar

Não é um código de status transmitido ao cliente.

Cache

Não se aplica

Definido em

nginx (fora do registro da IANA)

Exemplo
error_page 495 /bad-client-cert.html;
496SSL Certificate RequiredNão oficial · nginx

Interno do nginx: um certificado de cliente era obrigatório, mas não foi fornecido. Enviado ao cliente como 400.

Quando usar

Páginas de erro personalizadas quando ssl_verify_client está ativado.

Quando não usar

Não é um código de status transmitido ao cliente.

Cache

Não se aplica

Definido em

nginx (fora do registro da IANA)

Exemplo
error_page 496 /client-cert-required.html;
497HTTP Request Sent to HTTPS PortNão oficial · nginx

Interno do nginx: uma requisição HTTP simples chegou numa porta que espera TLS. Enviado ao cliente como 400.

Quando usar

Um truque comum é "error_page 497 =301 https://$host$request_uri;" para redirecionar essas requisições para HTTPS.

Quando não usar

Não é um código de status transmitido ao cliente.

Cache

Não se aplica

Definido em

nginx (fora do registro da IANA)

Exemplo
error_page 497 =301 https://$host:$server_port$request_uri;
498Invalid TokenNão oficial · Esri ArcGIS Server

O ArcGIS o retorna para um token expirado ou inválido por outro motivo.

Quando usar

Só é relevante ao chamar serviços do ArcGIS.

Quando não usar

Use 401 para tokens inválidos nas suas próprias APIs.

Cache

Não se aplica

Definido em

Esri ArcGIS (fora do registro da IANA)

Exemplo
HTTP/1.1 498 Invalid Token
499Client Closed RequestNão oficial · nginx

O nginx registra 499 quando o cliente fechou a conexão antes de o nginx enviar uma resposta.

Quando usar

Visto nos logs de acesso: usuários saindo da página, clientes móveis com timeout ou um balanceador de carga na frente do nginx com timeout menor. Muitos 499 num mesmo endpoint geralmente significam que ele está lento demais.

Quando não usar

O cliente nunca o recebe. A Esri também usa 499 para "Token Required".

Cache

Não se aplica

Definido em

nginx (fora do registro da IANA)

Exemplo
203.0.113.9 - - [16/Oct/2026:10:12:01 +0000] "GET /report HTTP/1.1" 499 0

5xx Erro do servidor

500Internal Server Error

O servidor encontrou uma condição inesperada que o impediu de atender à requisição.

Quando usar

Exceções não tratadas e bugs. É o código genérico quando nenhum 5xx mais específico se aplica.

Quando não usar

Não use para erros do cliente (4xx). Não exponha stack traces no corpo em produção; registre-os em log.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.6.1

Exemplo
HTTP/1.1 500 Internal Server Error
Content-Type: application/problem+json

{"title": "Internal Server Error", "traceId": "4bf92f35"}
501Not ImplementedArmazenável em cache por padrão

O servidor não suporta a funcionalidade exigida, normalmente um método HTTP que ele não reconhece de forma alguma.

Quando usar

Uma requisição com um método desconhecido (ex.: um método WebDAV num servidor web comum) ou um recurso que o servidor deliberadamente ainda não implementou.

Quando não usar

Se o método é conhecido mas não permitido nesta URL, use 405.

Cache

Armazenável em cache por padrão (cache heurístico)

Definido em

RFC 9110 §15.6.2

Exemplo
HTTP/1.1 501 Not Implemented
502Bad Gateway

Um gateway ou proxy recebeu uma resposta inválida do servidor upstream.

Quando usar

Enviado por proxies reversos e balanceadores de carga (nginx, Cloudflare, AWS ALB) quando o servidor da aplicação travou, fechou a conexão ou devolveu lixo.

Quando não usar

O código da aplicação raramente precisa enviá-lo, exceto gateways de API que chamam outro serviço que falhou.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.6.3

Exemplo
HTTP/1.1 502 Bad Gateway
Server: nginx
503Service Unavailable

O servidor não consegue atender à requisição agora: está sobrecarregado ou em manutenção. A situação deve ser temporária.

Quando usar

Manutenção planejada, descarte de carga, uma dependência fora do ar. Adicione Retry-After. Os mecanismos de busca mantêm a página indexada durante períodos curtos de 503, ao contrário de uma página de manutenção com 200 ou de um 404.

Quando não usar

Não deixe um site em 503 por dias; o Google acaba removendo URLs que continuam retornando esse código.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.6.4

Exemplo
HTTP/1.1 503 Service Unavailable
Retry-After: 3600
504Gateway Timeout

Um gateway ou proxy não recebeu resposta do servidor upstream a tempo.

Quando usar

Enviado por proxies e balanceadores de carga quando a aplicação demora mais que o timeout do proxy (proxy_read_timeout do nginx tem padrão de 60 segundos).

Quando não usar

Para jobs longos, não aumente apenas os timeouts; retorne 202 e processe de forma assíncrona.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.6.5

Exemplo
HTTP/1.1 504 Gateway Timeout
Server: awselb/2.0
505HTTP Version Not Supported

O servidor não suporta a versão principal do HTTP usada na requisição.

Quando usar

Um servidor recebendo uma versão de protocolo que ele não fala.

Quando não usar

Raro; os clientes negociam HTTP/2 e HTTP/3 por ALPN e Alt-Svc, não por tentativa.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 9110 §15.6.6

Exemplo
HTTP/1.1 505 HTTP Version Not Supported
506Variant Also Negotiates

Erro de configuração do servidor: a variante escolhida também está configurada para negociar, criando um loop.

Negociação de conteúdo transparente (experimental)

Quando usar

Só servidores que implementam a negociação de conteúdo transparente da RFC 2295.

Quando não usar

Não é para erros de aplicação.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 2295 §8.1

Exemplo
HTTP/1.1 506 Variant Also Negotiates
507Insufficient Storage

O servidor não consegue armazenar o necessário para concluir a requisição.

WebDAV

Quando usar

APIs WebDAV ou de armazenamento de arquivos quando o disco ou a cota do usuário estão cheios.

Quando não usar

Para um único upload que passa de um limite de tamanho, o 413 é mais claro.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 4918 §11.5

Exemplo
HTTP/1.1 507 Insufficient Storage
508Loop Detected

O servidor interrompeu uma operação porque encontrou um loop infinito (bindings WebDAV com Depth: infinity).

WebDAV

Quando usar

Servidores WebDAV. Hospedagens compartilhadas baseadas em CloudLinux também enviam 508 "Resource Limit Is Reached" quando uma conta atinge seus limites, o que não é padrão.

Quando não usar

Não é para loops de redirecionamento; esses são um erro do lado do cliente que o próprio navegador relata.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 5842 §7.2

Exemplo
HTTP/1.1 508 Loop Detected
509Bandwidth Limit ExceededNão oficial · Apache bw_mod / cPanel

A conta de hospedagem excedeu sua cota de banda.

Quando usar

Painéis de controle de hospedagem compartilhada.

Quando não usar

Use 503 ou 429 nos seus próprios sistemas.

Cache

Não se aplica

Definido em

Apache / cPanel (fora do registro da IANA)

Exemplo
HTTP/1.1 509 Bandwidth Limit Exceeded
510Not ExtendedObsoleto

A requisição não atendeu à política de acesso ao recurso no HTTP Extension Framework.

Marcado como obsoleto no registro da IANA: a RFC 2774 passou para o status Historic.

Quando usar

Nada atual; o framework de extensões nunca foi amplamente implementado.

Quando não usar

Não envie.

Cache

Armazenável em cache apenas com Cache-Control ou Expires explícitos

Definido em

RFC 2774 §7

Exemplo
HTTP/1.1 510 Not Extended
511Network Authentication Required

O cliente precisa se autenticar para obter acesso à rede: um portal cativo.

Quando usar

Portais de Wi-Fi de hotéis, aeroportos e cafés que interceptam o tráfego até o usuário fazer login ou aceitar os termos.

Quando não usar

Servidores de origem nunca devem enviá-lo; ele é só para proxies de rede que interceptam o tráfego.

Cache

Não pode ser armazenado por caches

Definido em

RFC 6585 §6

Exemplo
HTTP/1.1 511 Network Authentication Required
Content-Type: text/html

<meta http-equiv="refresh" content="0; url=https://login.example.net/">
520Web Server Returned an Unknown ErrorNão oficial · Cloudflare

A origem retornou uma resposta vazia, desconhecida ou inesperada ao Cloudflare.

Quando usar

Verifique os logs da origem: travamentos, conexões redefinidas, cabeçalhos acima do limite do Cloudflare ou uma resposta vazia.

Quando não usar

Só o Cloudflare envia este código.

Cache

Não se aplica

Definido em

Cloudflare (fora do registro da IANA)

Exemplo
HTTP/2 520
server: cloudflare
521Web Server Is DownNão oficial · Cloudflare

O Cloudflare não conseguiu se conectar à origem: a conexão foi recusada.

Quando usar

O servidor web de origem está parado, ou um firewall está bloqueando as faixas de IP do Cloudflare.

Quando não usar

Só o Cloudflare envia este código.

Cache

Não se aplica

Definido em

Cloudflare (fora do registro da IANA)

Exemplo
HTTP/2 521
server: cloudflare
522Connection Timed OutNão oficial · Cloudflare

O Cloudflare atingiu o timeout ao estabelecer uma conexão TCP com a origem.

Quando usar

Origem sobrecarregada, pacotes descartados por um firewall ou IP de origem errado no DNS.

Quando não usar

Só o Cloudflare envia este código.

Cache

Não se aplica

Definido em

Cloudflare (fora do registro da IANA)

Exemplo
HTTP/2 522
server: cloudflare
523Origin Is UnreachableNão oficial · Cloudflare

O Cloudflare não consegue alcançar a origem de forma alguma, normalmente por problema de roteamento ou registro DNS errado.

Quando usar

Confira se os registros DNS A/AAAA apontam para o IP certo e acessível.

Quando não usar

Só o Cloudflare envia este código.

Cache

Não se aplica

Definido em

Cloudflare (fora do registro da IANA)

Exemplo
HTTP/2 523
server: cloudflare
524A Timeout OccurredNão oficial · Cloudflare

O Cloudflare se conectou à origem, mas ela não enviou uma resposta HTTP dentro do timeout (100 segundos por padrão).

Quando usar

Requisições demoradas: mova o trabalho para um job em segundo plano e consulte o andamento, ou transmita o progresso.

Quando não usar

Só o Cloudflare envia este código.

Cache

Não se aplica

Definido em

Cloudflare (fora do registro da IANA)

Exemplo
HTTP/2 524
server: cloudflare
525SSL Handshake FailedNão oficial · Cloudflare

O handshake TLS entre o Cloudflare e a origem falhou.

Quando usar

A origem não está escutando na porta 443, não tem certificado, não tem cipher suites em comum ou o SNI não está configurado, enquanto o modo SSL é Full ou Full (strict).

Quando não usar

Só o Cloudflare envia este código.

Cache

Não se aplica

Definido em

Cloudflare (fora do registro da IANA)

Exemplo
HTTP/2 525
server: cloudflare
526Invalid SSL CertificateNão oficial · Cloudflare

No modo Full (strict), o Cloudflare não conseguiu validar o certificado da origem: expirado, autoassinado ou com nome de host errado.

Quando usar

Instale um certificado válido ou um certificado Cloudflare Origin CA na origem.

Quando não usar

Só o Cloudflare envia este código.

Cache

Não se aplica

Definido em

Cloudflare (fora do registro da IANA)

Exemplo
HTTP/2 526
server: cloudflare
527Railgun ErrorNão oficial · Cloudflare (descontinuado)Obsoleto

Problema de conexão entre o Cloudflare e um listener Railgun na origem. O Cloudflare descontinuou o Railgun.

Quando usar

Apenas histórico.

Quando não usar

Só o Cloudflare enviava este código.

Cache

Não se aplica

Definido em

Cloudflare (fora do registro da IANA)

Exemplo
HTTP/1.1 527 Railgun Error
530Origin DNS / 1xxx errorNão oficial · Cloudflare

Retornado com uma página de erro 1xxx do Cloudflare (como 1016 Origin DNS error); o código 1xxx mostrado na página é a causa real.

Quando usar

Pesquise o número do erro 1xxx mostrado na página.

Quando não usar

Só CDNs e hospedagens enviam este código.

Cache

Não se aplica

Definido em

Cloudflare (fora do registro da IANA)

Exemplo
HTTP/2 530
server: cloudflare
561Unauthorized (AWS ELB)Não oficial · AWS Application Load Balancer

A autenticação embutida do ALB (OIDC ou Cognito) falhou junto ao provedor de identidade.

Quando usar

Verifique a configuração do IdP na regra do listener do ALB.

Quando não usar

Não é para uso em aplicações.

Cache

Não se aplica

Definido em

AWS Elastic Load Balancing (fora do registro da IANA)

Exemplo
HTTP/1.1 561
598Network Read Timeout ErrorNão oficial · Alguns proxies HTTP

Usado por alguns proxies para sinalizar um timeout de leitura atrás do proxy.

Quando usar

Raro; pode aparecer em certos produtos de proxy.

Quando não usar

Use 504.

Cache

Não se aplica

Definido em

Informal convention (fora do registro da IANA)

Exemplo
HTTP/1.1 598
599Network Connect Timeout ErrorNão oficial · Alguns proxies e clientes HTTP

Usado por alguns proxies e bibliotecas de cliente (o cliente HTTP do Tornado, por exemplo) para timeout de conexão.

Quando usar

Raro.

Quando não usar

Use 504 em proxies.

Cache

Não se aplica

Definido em

Informal convention (fora do registro da IANA)

Exemplo
HTTP/1.1 599

Uma referência estática que roda no seu navegador; suas buscas não são enviadas a lugar nenhum. Ver todas as ferramentas grátis.

Encontrou um problema ou algo que poderia ser melhor? Lemos todas as mensagens e corrigimos rápido.

Esta lista de códigos de status HTTP cobre todos os códigos do registro da IANA, de 100 Continue a 511 Network Authentication Required, com o significado, quando usar, quando não usar, se os caches podem armazená-lo e a seção da RFC que o define. Digite um número, uma classe como 4xx ou uma palavra como “redirect” ou “rate limit” para filtrar, e crie um link direto para qualquer código com uma âncora como #404 ou #503.

As entradas oficiais seguem a RFC 9110 (2022), que substituiu a RFC 7231 e renomeou alguns códigos: 413 agora é Content Too Large e 422 é Unprocessable Content. Códigos que aparecem nos logs mas não estão no registro, como o 499 do nginx ou o 522 da Cloudflare, também estão incluídos e marcados como não oficiais, com o sistema que os envia. É uma referência, não um monitor: não acessa URLs nem verifica qual status um site no ar retorna.

Como usar

  1. Digite um código (503), uma classe (4xx) ou uma palavra-chave (timeout, redirect, cache) na caixa de pesquisa. Os resultados são filtrados enquanto você digita.
  2. Use os botões de classe para ver só os códigos 1xx, 2xx, 3xx, 4xx ou 5xx, e desmarque “Incluir códigos não oficiais” para ocultar os específicos de fornecedores.
  3. Clique num código para expandi-lo: significado, quando usar, quando não usar, comportamento de cache, a RFC que o define e um exemplo de resposta.
  4. Use “Copiar link para este código” para compartilhar um link direto, como /tools/http-status-codes#429.

Perguntas frequentes

Qual é a diferença entre 401 e 403?

401 Unauthorized significa que a requisição não tem credenciais válidas: o cliente não está logado ou o token expirou. O servidor precisa enviar um cabeçalho WWW-Authenticate dizendo como se autenticar. 403 Forbidden significa que o servidor sabe quem é o cliente, ou não precisa saber, e mesmo assim recusa; fazer login de novo não vai adiantar. Resumindo, 401 é “quem é você?” e 403 é “eu sei, e a resposta é não”.

Devo usar 301 ou 308 para um redirecionamento permanente?

Os dois são permanentes e os dois transferem sinais de ranqueamento no Google. A diferença está no método: ao seguir um 301, os navegadores podem transformar um POST num GET, enquanto o 308 exige que o cliente repita o mesmo método e o mesmo corpo. Para mudanças comuns de página, o 301 serve; para um endpoint de API que recebe POST ou PUT, use 308. O mesmo par existe para redirecionamentos temporários: o 302 pode mudar o método, o 307 não pode.

O que significa 499 nos logs do nginx?

499 Client Closed Request é um código exclusivo do nginx. Ele é registrado quando o cliente fecha a conexão antes de o nginx enviar uma resposta, então o cliente nunca chega a receber um 499. 499s ocasionais são usuários saindo da página; muitos num mesmo endpoint geralmente significam que ele está lento demais e que os clientes ou um balanceador de carga à frente estão atingindo o timeout antes.

Qual é a diferença entre 502, 503 e 504?

Os três vêm de um servidor que fica na frente de outro. 502 Bad Gateway significa que o proxy recebeu uma resposta inválida ou uma conexão interrompida do app upstream. 503 Service Unavailable significa que o servidor está temporariamente incapaz de atender requisições, normalmente por sobrecarga ou manutenção, e deve incluir Retry-After. 504 Gateway Timeout significa que o proxy desistiu de esperar a resposta do upstream.

418 I'm a teapot é um código de status de verdade?

Ele começou como piada de 1º de abril na RFC 2324 (1998) e foi implementado por tantos softwares que a RFC 9110 agora lista o 418 como “(Unused)”: reservado para que nunca receba um significado real. Não é um erro para enviar em problemas reais, mas não há problema em mantê-lo num easter egg.

Quais códigos de status podem ser armazenados em cache por padrão?

A RFC 9110 aponta 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414 e 501 como armazenáveis em cache por heurística, o que significa que um cache pode guardá-los mesmo sem Cache-Control ou Expires. A RFC 7725 acrescenta o 451. Outros códigos, incluindo 302 e 307, só são armazenados quando a resposta traz informação de validade explícita, e a RFC 6585 diz que 428, 429, 431 e 511 não devem ser armazenados de forma alguma.

As cinco classes num relance

• 1xx Informativas: respostas intermediárias antes da final. Você raramente lida com elas diretamente; 101 (upgrade para WebSocket) e 103 (Early Hints) são as que importam na prática.

• 2xx Sucesso: a requisição funcionou. 200 para uma resposta normal, 201 quando algo foi criado (com um cabeçalho Location), 204 quando não há corpo de propósito.

• 3xx Redirecionamento: o cliente precisa procurar em outro lugar. 301/308 para mudanças permanentes, 302/307 para temporárias, 303 depois de um POST de formulário, 304 quando a cópia em cache ainda é válida.

• 4xx Erro do cliente: a requisição está errada e repeti-la sem mudanças vai falhar de novo. 400 malformada, 401 não autenticado, 403 não permitido, 404 não encontrado, 409 conflito, 422 falha de validação, 429 limite de taxa atingido.

• 5xx Erro do servidor: a requisição pode estar certa, mas o servidor falhou. 500 é um bug, 502/504 são falhas entre o proxy e o upstream, 503 é indisponibilidade temporária.

Como escolher o código certo numa API

Retorne o código mais específico com que um cliente genérico consiga agir e coloque os detalhes no corpo. Um cliente HTTP com novas tentativas, uma CDN ou um sistema de monitoramento sabe o que 429 e 503 significam sem ler o seu JSON, mas não consegue interpretar um 200 com {"error": true}. A RFC 9457 (Problem Details) define um formato JSON padrão para corpos de erro.

Um mapeamento prático para a maioria das APIs JSON: 400 para entrada que não pode ser interpretada, 422 para entrada bem formada que falha na validação, 401 quando o token está ausente ou expirado, 403 quando o usuário não tem permissão, 404 para IDs desconhecidos (também para ocultar recursos que o usuário não pode ver), 409 para duplicatas e conflitos de versão, 412 quando um ETag de If-Match está desatualizado, 429 com Retry-After para limites de taxa e 503 com Retry-After para manutenção programada.

Não invente números novos. Os clientes tratam um código desconhecido como o x00 da sua classe (um 4xx desconhecido é tratado como 400), então um 461 personalizado não traz nada além de um 400 com uma mensagem clara.

Códigos de status e SEO

Os buscadores leem os códigos de status ao pé da letra. Um 301 ou 308 transfere os sinais da URL antiga para a nova; um 302 ou 307 diz ao Google para manter a URL antiga indexada. 404 e 410 removem a página do índice com o tempo. Uma página com 200 que diz “não encontrado” é um soft 404, que o Google detecta e informa no Search Console. Para manutenção, um período curto de 503 com Retry-After preserva o ranqueamento, enquanto uma página 200 do tipo “voltamos já” pode substituir o seu conteúdo nos resultados de busca. O Googlebot também reduz a velocidade de rastreamento quando vê 429, 500 ou 503.

Ferramentas grátis relacionadas

  • Analisador de user agent — Veja o seu próprio user agent e as client hints, ou analise qualquer string de UA em navegador, motor, sistema operacional, dispositivo e CPU. Modo em lote com CSV.
  • Formatador de JSON — Formate, minifique e valide JSON, com erros de parsing localizados por linha e coluna. No seu navegador, sem upload.
  • Docker Run ⇄ Compose — Transforme um comando docker run num serviço do docker-compose.yml, ou um serviço do Compose de volta em docker run.
  • Testador de regex — Teste uma expressão regular num texto de exemplo, com destaque das correspondências ao vivo, grupos de captura e prévia de substituição. Grátis, no navegador.