MiServe DevTools

Os seus autocolantes

Fixe aqui as ferramentas. Ficam guardadas neste navegador.

Referência de códigos de estado HTTP

Os códigos de estado HTTP de 100 a 511, com o que cada um significa para um programador e o RFC que o define, e ainda os códigos não padrão usados pelo nginx, pela Cloudflare e por outros produtos.

78 códigos de estado.

1xx Informação

O servidor recebeu o pedido e ainda o está a processar. São respostas intermédias, enviadas antes da resposta final.

100 Continue
O servidor recebeu os cabeçalhos do pedido e o cliente pode enviar o corpo. O cliente pede-o enviando Expect: 100-continue antes de um upload grande. RFC 9110
101 Switching Protocols
O servidor aceita mudar o protocolo desta ligação, como pedia o cabeçalho Upgrade. É assim que começa uma ligação WebSocket. RFC 9110
102 Processing
O servidor aceitou um pedido WebDAV e ainda o está a processar, por isso o cliente não deve desistir por timeout. A especificação atual do WebDAV já não o inclui e raramente é enviado. RFC 2518
103 Early Hints
Enviado antes da resposta final com cabeçalhos Link, para que o navegador possa começar a pré-carregar recursos ou a abrir ligações enquanto o servidor prepara a página. RFC 8297

2xx Sucesso

O pedido foi recebido, compreendido e aceite.

200 OK
O pedido teve êxito. O corpo contém o resultado: o recurso, num GET, ou o resultado da ação, num POST. RFC 9110
201 Created
O pedido criou um novo recurso. Normalmente, o cabeçalho Location indica o seu URL. RFC 9110
202 Accepted
O pedido foi aceite para um processamento que ainda não terminou e que ainda pode falhar. É típico de trabalho colocado numa fila. RFC 9110
203 Non-Authoritative Information
O pedido teve êxito, mas um proxy alterou a resposta enviada pelo servidor de origem. RFC 9110
204 No Content
O pedido teve êxito e não há corpo para enviar. É comum em DELETE, e em PUT ou PATCH quando o cliente já tem o novo estado. RFC 9110
205 Reset Content
O pedido teve êxito e o cliente deve repor a vista que o enviou, por exemplo limpando um formulário. Não há corpo. RFC 9110
206 Partial Content
O corpo contém apenas o intervalo de bytes pedido no cabeçalho Range. Usa-se para retomar transferências e para saltar para outro ponto de um vídeo. RFC 9110
207 Multi-Status
O corpo é um documento XML com um estado separado para cada um de vários recursos. É usado pelo WebDAV. RFC 4918
208 Already Reported
Dentro de uma resposta Multi-Status do WebDAV, marca os membros de um binding que já foram listados, para que não se repitam. RFC 5842
226 IM Used
O corpo é o resultado de aplicar ao recurso atual uma ou mais manipulações de instância, como um delta. Faz parte da codificação delta em HTTP, que raramente é implementada. RFC 3229

3xx Redirecionamento

O cliente tem de dar mais um passo para concluir o pedido, normalmente um pedido a outro URL.

300 Multiple Choices
O recurso tem várias representações e o cliente pode escolher uma. Raramente é usado, porque não existe uma forma padrão de fazer a escolha. RFC 9110
301 Moved Permanently
Um redirecionamento permanente: o recurso tem um novo URL, indicado no cabeçalho Location, e os motores de pesquisa costumam indexar esse URL no lugar do antigo. Os clientes podem mudar POST para GET ao segui-lo; use 308 para manter o método. RFC 9110
302 Found
Um redirecionamento temporário: por agora, o recurso está noutro URL, indicado no cabeçalho Location. Os clientes podem mudar POST para GET ao segui-lo; use 307 para manter o método. RFC 9110
303 See Other
A resposta está noutro URL, que o cliente deve obter com GET. É o redirecionamento habitual depois do POST de um formulário, para que recarregar a página não volte a submeter o formulário. RFC 9110
304 Not Modified
A cópia na cache do cliente continua atual, por isso não é enviado corpo. Responde a um pedido condicional feito com If-None-Match ou If-Modified-Since. RFC 9110
305 Use Proxy
O recurso tem de ser acedido através do proxy indicado no cabeçalho Location. Está obsoleto por razões de segurança, e os clientes não devem depender dele. RFC 9110
306 (Unused)
Uma versão anterior da especificação usava este código. Já não é usado, e o número continua reservado. RFC 9110
307 Temporary Redirect
O recurso está temporariamente noutro URL, e o cliente tem de seguir o redirecionamento e repetir o pedido nesse URL com o mesmo método e o mesmo corpo. RFC 9110
308 Permanent Redirect
O recurso tem um novo URL permanente, e o cliente tem de seguir o redirecionamento e repetir o pedido nesse URL com o mesmo método e o mesmo corpo. RFC 9110

4xx Erro do cliente

O pedido tem um problema do lado do cliente: está mal formado, não tem permissão ou pede algo que não pode ser servido.

400 Bad Request
O servidor não consegue processar o pedido porque está mal formado: a sintaxe está errada, o enquadramento da mensagem é inválido ou não é possível interpretar o corpo. RFC 9110
401 Unauthorized
O pedido não tem credenciais válidas. O cabeçalho WWW-Authenticate da resposta indica como autenticar. Apesar do nome, o código diz respeito à autenticação, não à permissão. RFC 9110
402 Payment Required
Reservado para uso futuro. Algumas APIs enviam-no quando uma subscrição terminou ou uma quota paga se esgotou. RFC 9110
403 Forbidden
O servidor compreendeu o pedido e recusa-o. Se o pedido levava credenciais, estas não dão acesso a este recurso, e enviá-las de novo não adianta. RFC 9110
404 Not Found
O servidor não tem nada neste URL, ou não quer revelar que tem. O código não diz se a ausência é permanente. RFC 9110
405 Method Not Allowed
O recurso existe mas não suporta este método. O cabeçalho Allow lista os métodos que suporta. RFC 9110
406 Not Acceptable
O servidor não consegue produzir uma resposta que satisfaça os cabeçalhos Accept, Accept-Language ou Accept-Encoding do pedido. RFC 9110
407 Proxy Authentication Required
Como o 401, mas o cliente tem de se autenticar no proxy, conforme descreve o cabeçalho Proxy-Authenticate. RFC 9110
408 Request Timeout
O servidor não recebeu o pedido completo dentro do tempo que estava disposto a esperar, e fecha a ligação. RFC 9110
409 Conflict
O pedido entra em conflito com o estado atual do recurso, por exemplo uma edição feita sobre uma versão desatualizada ou um valor duplicado onde só pode haver um. RFC 9110
410 Gone
O recurso existiu aqui e foi removido definitivamente. Ao contrário do 404, indica aos clientes e aos motores de pesquisa que podem esquecer o URL. RFC 9110
411 Length Required
O servidor recusa o pedido porque não tem cabeçalho Content-Length. RFC 9110
412 Precondition Failed
Uma condição em If-Match, If-Unmodified-Since ou num cabeçalho semelhante era falsa, por isso o pedido não foi aplicado. Evita que se sobrescreva uma alteração feita por outra pessoa. RFC 9110
413 Content Too Large
O corpo do pedido é maior do que o servidor aceita, normalmente por causa de um limite de upload no servidor ou num proxy à frente dele. O nome anterior era Payload Too Large. RFC 9110
414 URI Too Long
O URL é mais comprido do que o servidor aceita. Muitas vezes significa que foram postos na query string dados que deviam ir no corpo de um POST. RFC 9110
415 Unsupported Media Type
O servidor não aceita o formato do corpo do pedido, declarado no cabeçalho Content-Type ou Content-Encoding. RFC 9110
416 Range Not Satisfiable
O cabeçalho Range pede bytes que ficam fora do recurso. RFC 9110
417 Expectation Failed
O servidor não consegue cumprir o requisito indicado no cabeçalho Expect do pedido. RFC 9110
418 I'm a teapot
Uma brincadeira do Dia das Mentiras, tirada do Hyper Text Coffee Pot Control Protocol, em que um bule se recusa a fazer café. O RFC 9110 indica o número como não usado e mantém-no reservado, porque foi implementado como piada vezes demais para lhe poder ser dado outro significado. RFC 2324, RFC 9110
421 Misdirected Request
O pedido chegou a um servidor que não está configurado para responder por este nome de host. Pode acontecer quando um navegador reutiliza uma ligação HTTP/2 para outro host; o cliente pode tentar novamente numa nova ligação. RFC 9110
422 Unprocessable Content
A sintaxe do pedido está correta mas o conteúdo não é válido, por exemplo um corpo JSON que falha a validação. Vem do WebDAV, onde se chamava Unprocessable Entity. RFC 9110, RFC 4918
423 Locked
O recurso WebDAV está bloqueado, por isso o método não lhe pode ser aplicado. RFC 4918
424 Failed Dependency
O método não foi executado neste recurso WebDAV porque falhou outra ação de que dependia. RFC 4918
425 Too Early
O servidor não processa um pedido que chegou em early data do TLS, porque pode ser um replay. O cliente deve enviá-lo de novo depois de concluído o handshake. RFC 8470
426 Upgrade Required
O servidor recusa o pedido neste protocolo e indica, no cabeçalho Upgrade, o protocolo para o qual o cliente tem de mudar. RFC 9110
428 Precondition Required
O servidor exige que o pedido seja condicional, por exemplo com If-Match, para que uma atualização não possa sobrescrever sem aviso uma versão mais recente. RFC 6585
429 Too Many Requests
O cliente enviou demasiados pedidos num dado intervalo de tempo, o que se designa por limitação de taxa (rate limiting). O cabeçalho Retry-After pode indicar quanto tempo esperar. RFC 6585
431 Request Header Fields Too Large
Os cabeçalhos no seu conjunto, ou um deles, são maiores do que o servidor aceita. Uma causa comum é um cookie demasiado grande. RFC 6585
451 Unavailable For Legal Reasons
O servidor nega o acesso por causa de uma exigência legal, como uma decisão judicial. O número é uma referência ao romance Fahrenheit 451. RFC 7725

5xx Erro do servidor

O pedido pode ser válido, mas o servidor, ou um gateway à frente dele, não o conseguiu satisfazer.

500 Internal Server Error
O servidor encontrou uma condição que não esperava, muitas vezes uma exceção não tratada. É nos logs do servidor que se deve procurar a causa. RFC 9110
501 Not Implemented
O servidor não suporta a funcionalidade de que o pedido precisa, por exemplo um método que não reconhece. RFC 9110
502 Bad Gateway
Um gateway ou proxy recebeu uma resposta inválida do servidor que está por trás dele. Muitas vezes, a aplicação por trás do proxy foi abaixo ou não está à escuta. RFC 9110
503 Service Unavailable
O servidor não consegue tratar o pedido neste momento, por sobrecarga ou manutenção. O cabeçalho Retry-After pode indicar quando tentar novamente. RFC 9110
504 Gateway Timeout
Um gateway ou proxy não recebeu a tempo uma resposta do servidor por trás dele. Muitas vezes, a aplicação é demasiado lenta ou não está acessível. RFC 9110
505 HTTP Version Not Supported
O servidor não suporta a versão principal de HTTP usada no pedido. RFC 9110
506 Variant Also Negotiates
O servidor está mal configurado: a variante escolhida pela negociação transparente de conteúdo está ela própria configurada para negociar, o que cria um ciclo. RFC 2295
507 Insufficient Storage
O servidor não consegue guardar aquilo de que precisa para concluir o pedido. Está definido para o WebDAV. RFC 4918
508 Loop Detected
O servidor parou uma operação WebDAV porque encontrou um ciclo infinito ao seguir os bindings. RFC 5842
510 Not Extended
Falta ao pedido uma extensão que o servidor exige. A especificação que definiu o código tem agora o estatuto de histórica, e o registo da IANA marca o código como obsoleto. RFC 2774
511 Network Authentication Required
O cliente tem de se autenticar para ter acesso à rede. Quem o envia é um portal cativo, como a página de início de sessão do Wi-Fi de um hotel, e não o site que foi pedido. RFC 6585

Códigos não padrão

Estes códigos não constam do registo da IANA. Cada um pertence a um servidor ou serviço específico, e o seu significado só vale aí.

419 Page Expired Não padrão
O Laravel envia-o quando o token CSRF de um formulário está em falta ou expirou. Laravel
444 No Response Não padrão
Uma configuração do nginx pode devolver 444 para fechar a ligação sem enviar resposta. Aparece no log do nginx, e o cliente não recebe nada. nginx
494 Request Header Too Large Não padrão
O nginx usa-o internamente quando os cabeçalhos do pedido não cabem nos seus buffers. O cliente recebe uma resposta 400. nginx
495 SSL Certificate Error Não padrão
O nginx usa-o internamente quando falha a verificação de um certificado de cliente. A menos que a configuração o trate, o cliente recebe uma resposta 400. nginx
496 SSL Certificate Required Não padrão
O nginx usa-o internamente quando o cliente não apresentou o certificado que o servidor exige. nginx
497 HTTP Request Sent to HTTPS Port Não padrão
O nginx usa-o internamente quando um pedido HTTP simples chega a uma porta que espera HTTPS. nginx
499 Client Closed Request Não padrão
O nginx regista-o quando o cliente fechou a ligação antes de o servidor ter respondido. Muitas vezes significa que o timeout do cliente é mais curto do que o tempo que a aplicação demora. nginx
509 Bandwidth Limit Exceeded Não padrão
Os painéis de controlo de alojamento, como o cPanel, enviam-no quando um site esgotou a sua quota de largura de banda. cPanel
520 Web Server Returned an Unknown Error Não padrão
A Cloudflare envia-o quando o servidor de origem devolveu uma resposta vazia, desconhecida ou inesperada. Cloudflare
521 Web Server Is Down Não padrão
A Cloudflare envia-o quando o servidor de origem recusou a ligação. Cloudflare
522 Connection Timed Out Não padrão
A Cloudflare envia-o quando não conseguiu estabelecer a tempo uma ligação TCP ao servidor de origem. Cloudflare
523 Origin Is Unreachable Não padrão
A Cloudflare envia-o quando não conseguiu chegar ao servidor de origem, por exemplo por causa de um registo DNS errado ou de um problema de encaminhamento. Cloudflare
524 A Timeout Occurred Não padrão
A Cloudflare ligou-se ao servidor de origem, mas a origem não enviou uma resposta HTTP a tempo. Cloudflare
525 SSL Handshake Failed Não padrão
A Cloudflare envia-o quando falhou o handshake TLS entre a Cloudflare e o servidor de origem. Cloudflare
526 Invalid SSL Certificate Não padrão
A Cloudflare envia-o quando não conseguiu validar o certificado TLS do servidor de origem. Cloudflare

Funciona no seu navegador. Nada do que cola é enviado.

Sobre esta ferramenta

Como se organizam os códigos de estado

Cada resposta HTTP começa com um código de estado de três algarismos. O primeiro algarismo é a classe: 1xx é uma resposta intermédia, 2xx significa sucesso, 3xx pede ao cliente que vá a outro lado, 4xx diz que o problema está no pedido e 5xx diz que está no servidor. Um cliente que encontre um código que não conhece tem de o tratar como o primeiro código da sua classe, por isso um 4xx desconhecido é tratado como 400.

O texto a seguir ao número, como Not Found, é a reason phrase. É apenas uma descrição para pessoas: os clientes devem ignorá-la, e o HTTP/2 e o HTTP/3 nem sequer a enviam. Os nomes dos códigos padrão desta lista são os do registo da IANA, exceto o do 418, que o registo indica como (Unused).

Códigos que se confundem muitas vezes

401 e 403. O 401 significa que o servidor não sabe quem é o cliente, e autenticar-se pode resolver. O 403 significa que o servidor recusa o pedido e que voltar a autenticar-se não muda a resposta.

301, 302, 307 e 308. O 301 e o 308 são permanentes, o 302 e o 307 são temporários. Com 301 e 302, um cliente pode transformar um POST num GET ao seguir o redirecionamento; o 307 e o 308 exigem o mesmo método e o mesmo corpo.

502 e 504. Ambos vêm de um proxy ou balanceador de carga à frente da aplicação. Com 502, o proxy recebeu algo inválido ou a ligação falhou; com 504, esperou e não recebeu nada a tempo.

404 e 410. O 404 diz que aqui não há nada, talvez só por agora. O 410 diz que o recurso foi removido definitivamente.

De onde vem esta lista

Os códigos padrão vêm do HTTP Status Code Registry da IANA. A maioria está definida no RFC 9110, HTTP Semantics, que substituiu o RFC 7231 em 2022. Os restantes vêm do WebDAV e de extensões mais pequenas, e cada entrada indica o seu RFC. Os registos provisórios que ainda são Internet-Drafts ficam de fora. O último grupo reúne códigos que não estão registados mas que aparecem nos logs e nas páginas de erro do nginx, da Cloudflare e de outros produtos.

A lista completa faz parte da página, por isso pode ser lida sem JavaScript. O campo de pesquisa filtra-a no seu navegador.

Perguntas

Qual é a diferença entre 401 e 403?

401 Unauthorized significa que o pedido não tem credenciais válidas, e o cliente pode tentar novamente depois de se autenticar. 403 Forbidden significa que o servidor compreendeu o pedido e o recusa: as credenciais enviadas, se as houver, não dão acesso, por isso enviá-las de novo não adianta.

Um redirecionamento permanente deve usar 301 ou 308?

Ambos indicam aos clientes e aos motores de pesquisa que o URL mudou definitivamente. Com 301, um cliente pode transformar um POST num GET ao seguir o redirecionamento, enquanto o 308 exige o mesmo método e o mesmo corpo. Para URLs de páginas normais, pedidos com GET, os dois comportam-se da mesma forma.

Qual é a diferença entre 502 e 504?

Ambos são enviados por um proxy, gateway ou balanceador de carga, não pela aplicação. 502 Bad Gateway significa que o servidor por trás dele deu uma resposta inválida ou recusou a ligação. 504 Gateway Timeout significa que não respondeu dentro do limite de tempo do proxy.

O 499 é um código de estado HTTP verdadeiro?

Não está registado na IANA. O nginx escreve 499 no seu log de acessos quando o cliente fechou a ligação antes de a resposta ser enviada, por isso nenhum cliente chega a recebê-lo. Outros produtos usam números fora do registo de forma semelhante, como os 520 a 526 da Cloudflare.

Mais ferramentas de Rede