No texto anterior, “Introdução ao HTTP” vimos de uma maneira bem básica o que é o HTTP e como se dá um diálogo entre cliente e servidor. Se você não o leu, leia. Pode ir lá ler que eu espero… Ok, vamos continuar. A requisição ilustrada no último texto era a seguinte:
GET / HTTP/1.1 Host: dominio.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Ao receber essa requisição, o servidor procura pelo recurso requisitado e envia uma resposta ao cliente. Essa resposta contém um código de resposta, que consiste de um número e uma pequena descrição padrão do código. São vários os códigos possíveis, mas por enquanto vamos dar uma olhada nos mais comuns. Os códigos de resposta seguem a seguinte numeração: começados com 1 (1XX), que são códigos informativos; 2XX, que indicam sucesso; 3XX que reportam um redirecionamento; 4XX, que informam erros acontecidos no cliente e 5XX, erros no servidor. Não vou tratar de nenhum código 1XX nesse texto. Por dois motivos: eles não são muito comuns e porque, devo confessar, não os conheço muito bem a ponto de escrever sobre. Nota: Perceba que estamos assumindo uma requisição GET básica. A coisa nem sempre é tão simples e, dependendo do método, o significado e as ações que devem ser tomadas pelo cliente diante de alguns códigos de resposta podem ser um pouco diferentes. Requisições mais complexas serão cobertas em textos futuros. Vamos aos códigos:
200 OK
Como o nome já diz, esse código informa que a requisição teve sucesso e está tudo Ok. Junto com este código o servidor deve enviar, acompanhado de alguns headers, o conteúdo do recurso requisitado que pode ser, por exemplo, um documento HTML ou XML , uma imagem JPEG ou GIF, etc. Spec do código 200.
302 Found
Este é o código de redirecionamento mais comum. Ele descreve um redirecionamento temporário, ou seja, pode ser que numa próxima requisição esse redirecionamento não seja necessário. Ao receber um código 302, o cliente deve procurar pelo header “Location”, que deve informar a URI para a qual o recurso está sendo redirecionado. Em acessos futuros, a URI original deve ser requisitada novamente e o redirecionamento deve ser feito , caso seja necessário. Spec do código 302.
301 Moved Permanently
O recurso foi permanentemente movido para um outro local. Ao receber este código o cliente deve procurar pelo header “Location” e requisitar a URI nele informada. Acessos futuros devem requisitar a nova URL (contida no Location) já que o recurso foi movido de maneira permanente. A URI original deve ser apagada de qualquer registro existente no cliente. Spec do código 301.
304 Not Modified
Esse código é usado quando o cliente faz uso de caching, ou seja, guarda cópias locais dos recursos acessados. Ele informa ao cliente que o recurso não foi modificado desde a última requisição e que a versão guardada em cache pode ser usada. Os mecanismos envolvidos no processo de caching vão ser discutidos posteriormente. Por enquanto você pode dar uma lida no Tutorial sobre Caching do Mark Nottingham. Spec do código 304.
404 Not Found
Este código informa ao cliente que o recurso não foi encontrado no servidor. Pode ser que o recurso realmente não exista ou apenas esteja temporariamente indisponível. Pode ser que o usuário tenha cometido um erro ao digitar a URI ou simplesmente o servidor não queira revelar o que realmente aconteceu. Se o cliente guardar as URIs acessadas para referências futuras (como no caso do histórico de um browser), nenhuma ação deve ser tomada e a URI deve ser mantida, pois pode ser que o recurso esteja disponível em uma próxima requisição. Spec do código 404.
410 Gone
O código 410 informa que o recurso requisitado não existe mais, ou seja, foi intencionalmente removido do servidor e não há endereço para redirecionamento. De acordo com a especificação, esse estado deve ser considerado permanente. Infelizmente, na maioria das implementações, esse código não é usado, e o servidor envia um código 404 em seu lugar. Ao receber um código 410, o cliente — se tiver essa capacidade — deve remover qualquer referência ao respectivo recurso. Mark Pilgrim escreveu um texto excelente sobre o assunto, há algum tempo. Spec do código 410.
403 Forbidden
Você está mexendo onde não deve, rapaz! Esse código informa que você simplesmente não pode acessar o recurso requisitado. Nem mesmo é possível acessar o recurso por meio de autenticação. Esqueça, acesso negado. Ponto. Spec do código 403.
401 Unauthorized
Nesse caso o recurso pode ser acessado, desde que você possua as informação de autenticação corretas (usuário e senha) para acessá-lo, o que parece não ser verdade, já que você recebeu esse código. Spec do código 401.
500 Internal Server Error
Esse erro é bastante comum. Ele informa que algo de inesperado (ou simplesmente algo que ele não quer te contar) aconteceu no servidor e a sua requisição não pôde ser satisfeita. Spec do código 500.
502 Bad Gateway
Esse erro é muito comum no GMail. Significa que o servidor que você acessou atua como um proxy ou gateway e que o servidor “acima” dele reportou algum erro ao tentar completar a requisição. Spec do código 502.
503 Service Unavailable
O recurso está temporariamente indisponível. Este erro pode ser causado por sobrecarga no servidor ou por alguma operação de manutenção. Espere e tente novamente mais tarde. Spec do código 503. Bom, esses são os códigos de resposta mais comuns definidos pelo protocolo HTTP. Existem vários outros, que podem ser vistos na seção 10 da especificação do protocolo. Se você estiver implementando um cliente HTTP (uma aplicação em AJAX, por exemplo), lembre-se de considerar, pelo menos, a possibilidade de receber os códigos listados aqui, já que, muito provavelmente, mais cedo ou mais tarde, eles vão aparecer e você deve estar preparado. No próximo texto: Métodos de requisição.
Leia também:
- Pesquisa de Preços: Notebook 17, Notebook Toshiba, Conversor para TV Digital, Computador Positivo, Celular V3, Jogos para PC
Setembro 1st, 2006 at 9:09 pm
Gostei muito do conteudo,me ajudou muito a fazer um trabalho de Redes. Gostaria de receber mais informações sobre Redes, pois estou fazerndo essa matéria e otutorial sera sempre bem vindo.
Janeiro 3rd, 2007 at 11:16 pm
Muito obrigado, obrigado mesmo pelo texto.-Saúde e paz para ti e família.
Junho 19th, 2007 at 11:16 pm
Gostei do seu artigo. Acabo de linkar no meu blog.
Vou usar como referência
Outubro 10th, 2007 at 2:23 am
[…] categorias) aqui do blog e o wordpress jogou na minha cara, sem o menor pudor, uma página de erro 404, o famoso erro “Página não […]