O que esses códigos de status HTTP significam?
Os códigos de status HTTP são uma parte vital da navegação na web. Cada solicitação que você faz, cada vez que você clica em um link ou insere um URL, você obterá uma resposta. Atrás dessa resposta está um código numérico resumindo o resultado.
Você já ouviu falar do código 404 e provavelmente amaldiçoou seu navegador toda vez que mostra um. Mas o HTTP é mais poderoso do que você pode imaginar, e os códigos de status lidam com muitos cenários diferentes. Continue lendo para descobrir mais sobre esses pequenos números enigmáticos.
Como os clientes e servidores da web se comunicam
A navegação na web é possibilitada pela comunicação entre clientes e servidores. Quando você pede para ver uma página, seu cliente (navegador) envia uma solicitação a um servidor (site). Esperamos que essa solicitação seja bem-sucedida, momento em que o servidor envia uma resposta para você ler.
Em sua resposta, o servidor web inclui mais do que apenas o conteúdo. Para começar, inclui uma série de cabeçalhos, pequenos pedaços de metadados que se aplicam à resposta. Por exemplo, o cabeçalho Content-Type pode ter a seguinte aparência:
Content-Type: text/html; charset=UTF-8
Isso significa que “a resposta é HTML” em oposição a uma imagem ou arquivo de música.
Mas antes do conteúdo, antes mesmo dos cabeçalhos, cada resposta HTTP inclui uma linha que se parece com isto:
HTTP/1.1 200 OK
Neste exemplo, junto com a versão HTTP (1.1), um código de status é “200 OK”. Em outras palavras, “tudo é bom, aqui está o seu conteúdo”. O 200 é a parte mais importante. Os sistemas podem testá-lo para determinar exatamente o que ocorreu. O “OK” é uma boa dica curta, descrevendo o status de qualquer humano que esteja assistindo.
Exemplos de códigos de status comuns
Os códigos de status 404 e 200 são muito comuns, mas existem muitas outras possibilidades.
- 500 (ERRO DO SERVIDOR INTERNO) é um status de erro. Isso significa que algo deu errado no servidor e ele não pode atender à solicitação. Isso pode ser um bug de programação ou algum outro erro de tempo de execução.
- 403 (PROIBIDO) significa que o servidor entendeu a solicitação, mas se recusa a permiti-la. Isso geralmente se aplica a ações relacionadas ao usuário em aplicativos da web mais complicados. Por exemplo, tentar editar uma postagem de propriedade de outra pessoa.
- 401 (NÃO AUTORIZADO) é muito semelhante a 403. Nesse caso, a solicitação original não tem permissão para acessar o recurso porque não forneceu nenhuma credencial de usuário. Em outras palavras, você não está logado.
- 400 (PEDIDO RUIM) significa que o servidor não conseguiu entender o que estava sendo solicitado. Talvez haja alguma informação faltando, como um parâmetro de URL. Talvez algo tenha corrompido a solicitação em trânsito.
Grupos de código de status HTTP
Todos os códigos de status que vimos até agora têm três dígitos, todos entre 200 e 500. Isso não é coincidência. Os status HTTP têm três dígitos, com o primeiro dígito entre um e cinco, inclusive. E o valor desse primeiro dígito coloca o código em um dos cinco grupos, cada um com um significado específico.
O primeiro grupo, 1xx, é “informativo”. Todos esses casos significam que o servidor entendeu a solicitação, mas não está pronto para enviar uma resposta. Você não os verá muito em ação, mas eles estão lá para os sistemas que precisam deles.
O grupo 2xx é o local da resposta que você normalmente deseja: 200 (OK) . Esse é o caso de sucesso mais comum, mas existem outros.
O código 204 (SEM CONTEÚDO) é bem estranho. Um servidor pode retorná-lo como resultado de um PUT, POST ou PATCH. O significado, nesses casos, seria que o servidor fez a atualização, mas não há necessidade de retornar nada ao cliente.
Os códigos no grupo 3xx demonstram como os status HTTP vão além de apenas comunicar o sucesso ou o fracasso. Os códigos de status que começam com 3 indicam um redirecionamento. Isso significa que a solicitação original não era ruim, mas o cliente deve usar um URL diferente.
Isso pode ser temporário, como no caso de 302 (ENCONTRADO) , que um site pode usar para hospedar um URL promocional que redireciona para uma página de produto final. Um site pode usar um redirecionamento permanente, por meio do status 301 (MOVIDO PERMANENTEMENTE) . Essa é uma boa prática quando, por exemplo, um site mudou o nome de uma página.
Os status de redirecionamento geralmente são acompanhados por um cabeçalho de localização . Isso informa ao cliente qual URL solicitar em vez do original. Os servidores geralmente respondem com cabeçalhos adicionais. Eles fornecerão informações mais úteis do que apenas o código de status.
Os status que começam com 4 são erros do cliente. Essencialmente, eles significam “o navegador (ou a pessoa que o usa) fez algo errado”. Já discutimos vários deles (400, 401, 403, 404) e este é o maior grupo de códigos de status por uma quantidade significativa. Outros exemplos de erro de cliente incluem a solicitação de um URL que existia, mas não existe mais: 410 (SE ISSO) . Há também 429 (DEMAIS PEDIDOS) , que oferece suporte à limitação de taxa para que os recursos não fiquem sobrecarregados. Isso é muito comumente usado por APIs REST.
Por fim, os status na faixa de 500 a 599 indicam que algo deu errado com o servidor enquanto ele tentava atender à solicitação.
Obtendo o status HTTP com curl
A ferramenta de linha de comando HTTP para todos os fins mais comumente usada é curl . Usando curl, você pode enviar solicitações HTTP manualmente, ver detalhes de resposta subjacentes e examinar códigos de status.
O programa curl não torna incrivelmente fácil mostrar apenas um código de status, mas você pode fazer isso usando algumas opções, a saber:
- -o <filename> diz ao curl para enviar sua saída padrão para um arquivo. Você pode usá-lo para descartar toda a saída normal.
- -w <formato> exibe informações personalizadas de um conjunto de variáveis disponíveis, uma das quais é “http_code”, ou seja, o código de status de resposta.
Você também pode usar -s para ocultar alguns detalhes que o curl normalmente mostra sobre a transferência, como o progresso em tempo real. Veja como colocar essas opções juntas:
$ curl -sw "%{http_code}" -o /dev/null http://example.org
200
$ curl -sw "%{http_code}" -o /dev/null http://bbc.co.uk
301
Ou você pode usar opções ligeiramente diferentes e um pipeline para manipular o resultado:
$ curl -sI http://example.org/no | head -1 | cut -f2 -d' '
404
Visualizando Códigos de Status em um Navegador da Web
Se você precisar verificar os códigos de status HTTP, seu navegador da web pode ajudar. A maioria dos navegadores modernos possui um console que pode exibir informações avançadas. Usando o Chrome como exemplo, veja como verificar o código de status de um URL:
- Escolha Exibir -> Desenvolvedor -> Ferramentas do desenvolvedor no menu principal. Isso alterna uma pequena janela na parte inferior do seu navegador.
- Se você ainda não estiver olhando para a guia Rede da janela Ferramentas do desenvolvedor, mude para ela.
- Clique no botão Doc para mostrar apenas as solicitações de conteúdo da página.
- Atualize a página que você está vendo.
Observe que, ao lado dos URLs solicitados, o navegador exibe uma coluna Status . Ele mostra exatamente qual código de status o servidor enviou de volta.
Outros recursos
Existem muitos recursos bons que explicam mais sobre os códigos de status HTTP. A página da Wikipedia intitulada Lista de códigos de status HTTP e este documento oficial de padrões do datatracker são bons pontos de partida.
A referência mais útil pode ser httpstatuses.com . Ele explica todos os códigos de status HTTP em um formato conciso e fácil de entender. Ele também fornece detalhes de código úteis que podem ser úteis ao programar qualquer coisa relacionada a HTTP.
O formato dos URLs de httpstatuses é particularmente útil. A página para o código de status 403 é simplesmente https://httpstatuses.com/403 . Você pode alterar facilmente o URL para pesquisar qualquer código de status de que precisar.
Os status HTTP fazem a web funcionar
O código de status HTTP é um número simples de três dígitos que a maioria das pessoas experimenta sob o disfarce do 404. Mas é muito mais poderoso do que isso, e os códigos de status suportam uma ampla gama de comportamentos.
HTTP2 é a próxima versão do HTTP, mas a boa notícia é que os códigos de status permanecem os mesmos. Tudo o que você aprendeu aqui ainda será relevante no futuro próximo.