Os códigos de resposta HTTP (ou simplesmente códigos de status) são códigos de três dígitos emitidos por um servidor em resposta a uma solicitação do lado do cliente. Esses códigos de status servem como um meio de comunicação rápida e concisa sobre como o servidor trabalhou e respondeu à solicitação do cliente.
A Internet Assigned Numbers Authority (IANA) mantém o registro oficial dos códigos de status HTTP. Nos 3 dígitos de um código de status HTTP, o primeiro dígito define a categoria do código de status, enquanto os dois últimos dígitos são atribuídos a um tipo específico de resposta em uma determinada categoria. Existem cinco categorias diferentes de códigos de status HTTP, e eles são classificados com base no tipo de resposta que o servidor comunica ao cliente:
- 1XX – Código informativo : Esta categoria indica que a solicitação foi recebida e compreendida. Ele é emitido em caráter provisório enquanto o processamento da solicitação continua. Ele alerta o cliente para aguardar uma resposta final. A mensagem consiste apenas na linha de status e nos campos de cabeçalho opcionais e é encerrada por uma linha vazia.
- 2XX – Código de sucesso : Esta categoria indica que a ação solicitada pelo cliente foi recebida, compreendida e aceita. Isso significa essencialmente que a solicitação que o cliente fez foi recebida pelo servidor e que o servidor concluiu o que deveria fazer de forma completa e com êxito.
- 3XX – Código de redirecionamento : Esta categoria indica que o cliente pode realizar ações adicionais para concluir a solicitação. Normalmente, essa ação adicional é redirecionar o usuário para outra URL. Muitos dos códigos de status nesta categoria são usados no redirecionamento de URL .
- 4XX – Código de erro do cliente : Esta categoria indica que a solicitação não pode ser atendida porque há um erro vindo do cliente. A solicitação pode conter sintaxe incorreta ou falta de autorização, etc. O servidor deve incluir uma entidade contendo uma explicação da situação do erro (exceto ao responder a uma solicitação HEAD) e se é uma condição temporária ou permanente.
- 5XX – Código de erro do servidor : Esta categoria indica que o servidor encontrou um erro ou é incapaz de realizar uma solicitação válida. O servidor deve incluir uma entidade contendo uma explicação da situação de erro (exceto ao responder a uma solicitação HEAD), e indicar se é uma condição temporária ou permanente.
Abaixo estão listados os códigos de status de resposta HTTP mais comuns para cada categoria.
A. Códigos informativos
100 Continue – Continuar
Esse código de status indica que está tudo bem e que o navegador deve continuar com a solicitação ou ignorá-la se ela já estiver concluída.
Isso é usado para informar ao cliente que a parte inicial da solicitação foi recebida e ainda não foi rejeitada pelo servidor. Em seguida, o navegador deve continuar enviando o restante da solicitação ou ignorar essa resposta caso a solicitação já tenha sido concluída. O servidor deve enviar uma resposta final após a conclusão da solicitação.
101 Switching Protocols – Protocolos de Comutação
Esse código de status indica que o servidor está disposto a alternar o protocolo de aplicativo usado na conexão conforme solicitado por um navegador por meio do cabeçalho de solicitação de atualização. O servidor também incluirá na resposta um cabeçalho de resposta de atualização para indicar o protocolo para o qual mudou.
O protocolo só pode ser comutado quando for vantajoso, por exemplo, alternar para uma versão mais recente do HTTP em relação às versões mais antigas e alternar para um protocolo síncrono e em tempo real ao fornecer recursos que precisam.
103 Dicas Iniciais – Early Hints
Esse código de status é usado junto com o cabeçalho Link para permitir que o agente do usuário (por exemplo, navegador) comece a pré-carregar recursos enquanto o servidor ainda está preparando uma resposta.
B. Códigos de sucesso
200 OK
Este código de status indica que a solicitação foi bem-sucedida. O significado de um sucesso depende do método de solicitação HTTP:
- GET: O recurso solicitado foi transmitido na resposta junto com o corpo da mensagem.
- HEAD: Os cabeçalhos de representação são transmitidos na resposta sem nenhum corpo de mensagem.
- POST: O recurso que descreve o resultado da ação é transmitido na resposta.
- TRACE: A resposta contém a mensagem de solicitação recebida pelo servidor.
O código de status para o resultado bem-sucedido de PUT ou DELETE geralmente não é 200 OK, mas 204 Sem conteúdo ou 201 Criado se o recurso for carregado pela primeira vez. Uma resposta 200 é armazenável em cache por padrão.
201 Criado – Created
Esse código de status indica que a solicitação foi bem-sucedida e resultou na criação de um novo recurso. O servidor terá que criar o recurso antes de retornar o 201. O novo recurso é retornado no corpo da mensagem e pode estar localizado no URI da solicitação ou no conteúdo do cabeçalho Location.
202 Aceito – Accepted
Esse código de status indica que a solicitação foi aceita para processamento e o processamento não foi concluído ou iniciado. A solicitação pode ou não ser atendida, pois pode ser desautorizada quando o processamento realmente ocorrer.
O status 202 é sem compromisso. Sua finalidade é permitir que um servidor aceite outra solicitação para outro processo (por exemplo, um processo orientado a lotes) sem exigir que a conexão do agente do usuário com o servidor persista até que o processo seja concluído. Isso significa que não há como o HTTP enviar posteriormente um código de status indicando o resultado do processamento da solicitação. Mas, a resposta incluirá uma indicação do status atual da solicitação e um ponteiro para um monitor de status ou alguma estimativa de quando o usuário pode esperar que a solicitação seja atendida.
203 Non-Authoritative Information – Informações Não Autoritárias
Esse código de status indica que a solicitação foi bem-sucedida, mas a carga útil incluída foi modificada por um proxy de transformação da resposta 200 OK do servidor de origem. E as metainformações retornadas no cabeçalho não são o conjunto definitivo disponível no servidor de origem, mas são coletadas de uma cópia local ou de terceiros. Uma resposta 203 é armazenável em cache por padrão.
204 No Content – Sem Conteúdo
Esse código de status indica que uma solicitação foi bem-sucedida, mas não precisa retornar um corpo, para que o cliente não precise sair da página atual. A resposta 204 não inclui um corpo e, portanto, sempre é encerrada pela primeira linha vazia após o campo de cabeçalho.
Esta resposta destina-se a permitir a entrada de ações sem causar uma alteração na página ativa do navegador, embora qualquer metainformação nova ou atualizada seja aplicada à página ativa do navegador. Por exemplo, ao implementar a funcionalidade “salvar e continuar editando” para um site wiki. Nesse caso, uma solicitação PUT seria usada para salvar a página e a resposta 204 seria enviada para indicar que o editor não deve ser substituído por outra página. Uma resposta 204 pode ser armazenada em cache por padrão (um cabeçalho ETag é incluído nessa resposta).
C. Códigos de redirecionamento
300 Multiple Choices – Múltiplas Escolhas
Esse código de status indica que a solicitação tem mais de uma resposta possível. O usuário-agente ou o usuário deve escolher um deles. A menos que tenha sido uma solicitação HEAD, a resposta incluirá uma lista de características de recursos e local/locais que o usuário pode escolher.
Dependendo do formato e dos recursos do navegador, a seleção da opção mais adequada pode ser realizada automaticamente. Se o servidor tiver uma escolha preferencial de representação, ele incluirá o URI específico para essa representação no campo Localização (Location) e o navegador poderá usar o valor do campo Localização para redirecionamento automático. Como não há uma maneira padronizada de escolher uma das respostas, esse código de resposta é muito raramente usado. Uma resposta 300 é armazenável em cache por padrão.
301 Moved Permanently – Movido Permanentemente
Esse código de status indica que o recurso solicitado foi movido definitivamente para o novo URI permanente. O URI permanente é fornecido pelo campo Location na resposta. Se o método de solicitação for HEAD, a resposta conterá uma pequena nota de hipertexto com um hiperlink para o(s) novo(s) URI(s). Para métodos de solicitação diferentes de GET ou HEAD, um código de status 301 não redirecionará automaticamente a solicitação, a menos que possa ser confirmado pelo usuário, pois isso pode alterar as condições sob as quais a solicitação foi emitida.
Recomenda-se usar o código de status 301 apenas como uma resposta para os métodos GET ou HEAD, pois a alteração do método é explicitamente proibida com esse status e, em vez disso, usar o redirecionamento permanente 308 para métodos POST. Uma resposta 301 é armazenável em cache por padrão.
302 Found – Encontrado
Esse código de status indica que o recurso solicitado foi movido temporariamente para o URI. O URI temporário é fornecido pelo campo Local na resposta. Se o método de solicitação for HEAD, a resposta conterá uma pequena nota de hipertexto com um hiperlink para o(s) novo(s) URI(s). Para métodos de solicitação diferentes de GET ou HEAD, um código de status 302 não redirecionará automaticamente a solicitação, a menos que possa ser confirmado pelo usuário, pois isso pode alterar as condições sob as quais a solicitação foi emitida.
Recomenda-se usar o código 302 apenas como resposta para os métodos GET ou HEAD, pois a alteração do método é explicitamente proibida para esse status, e usar o 307 Temporary Redirect se o método for alterado quando a solicitação redirecionada for feita. Nos casos em que você deseja que o método seja alterado para GET, use 303 See Other. Isso também é útil quando você deseja dar uma resposta a um método PUT que não é o recurso carregado, mas uma mensagem de confirmação como: ‘você carregou XYZ com sucesso’. Uma resposta 302 pode ser armazenada em cache se indicada por um campo de cabeçalho Cache-Control ou Expires.
303 See Other – Ver Outros
Esse código de status indica que os redirecionamentos não estão vinculados aos recursos recém-carregados, mas a uma página personalizada (por exemplo, página de confirmação ou página de progresso do upload). Esse código de status geralmente é enviado de volta como resultado de PUT ou POST. O método usado para exibir esta página redirecionada é sempre GET.
304 Not Modified – Não Modificado
Este código de status indica que não há necessidade de retransmitir os recursos solicitados. É um redirecionamento implícito para um recurso em cache. Isso acontece quando o método de solicitação é seguro, por exemplo, GET ou HEAD, ou quando a solicitação é condicional e usa um cabeçalho If-None-Match ou If-Modified-Since. A resposta 200 OK equivalente incluiria os cabeçalhos Cache-Control, Content-Location, Date, ETag, Expires e Vary.
307 Temporary Redirect – Redirecionamento Temporário
Esse código de status indica que o recurso solicitado foi movido temporariamente para o URI. O URI temporário é fornecido pelo campo Location na resposta. A única diferença entre 307 e 302 Found é que 307 garante que o método e o corpo não serão alterados quando a solicitação redirecionada for feita. Para solicitações GET, o comportamento 302 e 307 é idêntico. O comportamento com métodos não GET e 302 Found é imprevisível na Web, enquanto o comportamento com 307 é previsível.
Nos casos em que você deseja que o método seja alterado para GET, use 303 See Other. Isso também é útil quando você deseja dar uma resposta a um método PUT que não são os recursos carregados, mas uma mensagem de confirmação (como “Você fez upload de XYZ com sucesso”).
308 Permanent Redirect – Redirecionamento Permanente
Esse código de status indica que o recurso solicitado foi movido definitivamente para o URI. O URI permanente é fornecido pelo campo Location na resposta. O método de solicitação e o corpo não serão alterados, enquanto 301 pode ser incorretamente alterado algumas vezes para um método GET.
D. Códigos de erro do cliente
400 Bad Request – Solicitação Inválida
Este código de status indica que o servidor não pode processar a solicitação devido a um erro no lado do cliente, por exemplo, sintaxe de solicitação malformada, estrutura de mensagem de solicitação inválida ou roteamento de solicitação enganoso. O cliente é aconselhado a não repetir a solicitação, a menos que sejam feitas modificações.
401 Unauthorized – não autorizado
Esse código de status indica que a solicitação não foi aplicada porque não possui credenciais de autenticação válidas para o recurso de destino. Este status é enviado com um cabeçalho WWW-Authenticate que contém informações sobre como autorizar corretamente. Com este código de status, é possível repetir a solicitação incluindo autenticação para acessar o recurso de destino. Este status é semelhante ao 403, mas neste caso, a autenticação é possível.
402 Payment Required – Pagamento Necessário
Este código de status é um erro de cliente não padrão e está reservado para uso futuro. Originalmente foi criado para habilitar dinheiro digital ou sistemas de pagamento e indicaria que a solicitação não pode ser processada até que o cliente faça um pagamento. No entanto, não existe uma convenção de uso padrão e diferentes entidades a utilizam em diferentes contextos.
403 Forbidden – Proibido
Este código de status indica que o servidor entendeu a solicitação, mas se recusa a autorizá-la.
Esse status é semelhante ao 401 Unauthorized, mas neste caso, a reautenticação não fará diferença, portanto, não há necessidade de repetir a solicitação. O acesso é permanentemente proibido e vinculado à lógica do aplicativo, como direitos insuficientes a um recurso. Para qualquer método de solicitação, exceto HEAD, se o servidor quiser que o motivo da recusa esteja disponível para o cliente, então 403 pode ser usado. No entanto, se o servidor não quiser disponibilizar essas informações, então 404 Not Found pode ser usado.
404 Not Found – não encontrado
Este código de status indica que o servidor não pode encontrar nada que corresponda ao Request-URI. Os links que levam a uma página 404 são frequentemente chamados de links quebrados ou mortos e podem estar sujeitos à deterioração do link . Não há indicação se a condição é temporária ou permanente. Mas se o servidor souber que o recurso foi removido permanentemente, então 410 Gone deve ser usado em vez de um status 404. Esse código de status também é comumente usado quando o servidor não deseja revelar exatamente por que a solicitação foi recusada ou quando nenhuma outra resposta é aplicável. Uma resposta 404 pode ser armazenada em cache por padrão.
405 Method Not Allowed – Método Não Permitido
Esse código de status indica que o método de solicitação é conhecido pelo servidor, mas não é suportado pelo recurso de destino. O método especificado na Request-Line não é permitido para o recurso identificado pelo Request-URI. O servidor DEVE gerar um campo de cabeçalho Permitir contendo uma lista de métodos suportados para o recurso solicitado. Uma resposta 405 pode ser armazenada em cache por padrão.
408 Request Timeout – Tempo limite de solicitação
Esse código de status indica que o servidor gostaria de encerrar essa conexão não utilizada, porque a solicitação excedeu o tempo que o servidor estava preparado para esperar. O cliente PODE repetir o pedido sem modificações em qualquer momento posterior. Um servidor deve enviar o campo de cabeçalho “close” Connection na resposta, pois 408 indica que o servidor decidiu fechar a conexão em vez de continuar esperando.
409 Conflict – Conflito
Esse código de status indica que uma solicitação não pode ser concluída devido a um conflito com o estado atual do recurso de destino. Esse código é permitido em situações em que se espera que o cliente possa resolver o conflito e reenviar a solicitação. Portanto, o corpo de resposta deve incluir informações suficientes para que o cliente reconheça a origem do conflito.
É mais provável que isso ocorra em resposta a uma solicitação PUT. Por exemplo, você pode obter uma resposta 409 ao fazer upload de um arquivo mais antigo do que aquele que já está no servidor, resultando em um conflito de controle de versão. Nesse caso, a resposta deve conter uma lista das diferenças entre as duas versões em um formato definido pela resposta Content-Type.
410 Gone – Desaparecido
Esse código de status indica que o acesso ao recurso de destino não está mais disponível permanentemente no servidor de origem e nenhum endereço de encaminhamento é conhecido. Se o proprietário do servidor não souber se essa condição seria temporária ou permanente, então 404 deve ser usado.
A resposta 410 destina-se principalmente a auxiliar a tarefa de manutenção, notificando o cliente de que o recurso está intencionalmente indisponível e que os proprietários do servidor desejam que os links remotos para esse recurso sejam removidos. Esse evento é comum para serviços promocionais por tempo limitado e para recursos pertencentes a indivíduos que não trabalham mais no site do servidor. Uma resposta 410 pode ser armazenada em cache por padrão.
414 URI Too Long – URI muito longo
Esse código de status indica que o servidor se recusa a processar a solicitação porque o URI de solicitação fornecido pelo cliente é maior do que o servidor está disposto a interpretar.
Existem algumas condições em que isso pode ocorrer: a) quando um cliente converte incorretamente uma solicitação POST em uma solicitação GET com informações de consulta longa, b) quando o cliente desce para um loop de redirecionamento (por exemplo, um prefixo de URI redirecionado que aponta para um sufixo dele mesmo), ou c) quando o servidor está sob ataque de um cliente que tenta explorar possíveis falhas de segurança. Uma resposta 414 pode ser armazenada em cache por padrão.
415 Unsupported Media Type – Tipo de mídia não suportado
Esse código de status indica que o servidor se recusa a aceitar a solicitação porque o formato da carga está em um formato não suportado. O problema de formato pode ser devido ao Content-Type ou Content-Encoding indicado na solicitação, ou como resultado da inspeção direta dos dados.
418 I’m a teapot – eu sou um bule
Este código de status indica que o servidor se recusa a preparar café porque é, permanentemente, um bule. Um bule combinado de café/chá que está temporariamente sem café deve retornar 503 Serviço indisponível. Este código de status foi definido em 1998 como uma das piadas do IETF April Fools, no RFC 2324, Hyper Text Coffee Pot Control Protocol. Alguns sites usam essa resposta para solicitações que não desejam manipular, como consultas automatizadas, e um servidor HTTP Nginx usa esse código para simular um comportamento semelhante ao goto em sua configuração.
429 Too Many Requests – Muitos Pedidos
Este código de status indica que o usuário enviou muitas solicitações em um determinado período de tempo (“limitação de taxa”). As representações de resposta podem incluir detalhes explicando a condição e um cabeçalho Retry-After indicando quanto tempo esperar antes de fazer uma nova solicitação. No entanto, quando um servidor está sob ataque ou apenas recebendo um número muito grande de solicitações de uma única parte, responder a cada um com um código de status 429 consumirá recursos, portanto, quando pode ser mais apropriado apenas descartar conexões ou tomar outras medidas .
E. Códigos de erro do servidor
500 Internal Server Error – Erro interno do servidor
Esse código de status indica que o servidor encontrou uma condição inesperada que o impediu de atender à solicitação. Essa resposta de erro geralmente é usada como uma resposta genérica “pega-tudo”, indicando que o servidor não pode encontrar um código de status 5xx melhor para responder. Às vezes, os administradores do servidor registram respostas de erro como o código de status 500 com mais detalhes sobre a solicitação para evitar que o erro ocorra novamente no futuro.
501 Not Implemented – Não Implementado
Esse código de status significa que o servidor não oferece suporte à funcionalidade necessária para atender à solicitação. Esse status também pode enviar um cabeçalho Retry-After, informando ao cliente quando verificar novamente se a funcionalidade é suportada até então. Um código 501 não é algo que você possa consertar, mas requer uma correção pelo servidor web que você está tentando acessar.
502 Bad Gateway
Esse código de status indica que o servidor, enquanto atuava como gateway ou proxy, recebeu uma resposta inválida do servidor upstream na tentativa de atender à solicitação. Um código 502 não é algo que você possa consertar, mas requer uma correção pelo servidor web ou pelos proxies pelos quais você está tentando acessar.
503 Service Unavailable – serviço indisponível
Este código de status indica que o servidor está indisponível no momento e não está pronto para lidar com qualquer solicitação devido a uma sobrecarga temporária ou manutenção do servidor. Esta resposta é usada como uma medida temporária que deverá ser aliviada após algum tempo. Juntamente com esta resposta, o cabeçalho Retry-After deve conter o tempo estimado para a recuperação do serviço, e uma página amigável explicando o problema também deve ser incluída. Se nenhum Retry-After for fornecido, o cliente DEVE lidar com a resposta como faria para uma resposta 500 Internal Server Error.
504 Gateway Timeout – Tempo limite do gateway
Este código de status indica que o servidor, enquanto atuava como gateway ou proxy, não obteve uma resposta oportuna do servidor upstream especificado pelo URI (por exemplo, HTTP, FTP, LDAP) ou algum outro servidor auxiliar (por exemplo, DNS) na tentativa de atender o pedido. Um código 504 geralmente não é algo que você possa corrigir, mas requer uma correção pelo servidor da Web ou pelos proxies pelos quais você está tentando acessar.