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.
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 [...]
novembro 23rd, 2009 at 6:53 pm
Gostei do seu artigo e espero encontrar mais informações, inclusive de Voip e outros porque estou estudando sobre o assunto.
Obrigada!
abril 5th, 2010 at 9:36 pm
Belo blog! Estou entrando no mundo da Web e seu blog está me ajudando e muito.
Parabéns!
outubro 23rd, 2010 at 12:38 pm
Olá!
Parabéns pela breve explicação sobre o HTTP!
Estou com um problema e espero que você possa me ajudar!
Ao verificando o FireBug vejo que esta sendo retornado o código ’302 Found’
e a resposta é: Falha em carregar fonte para: http://meulinklocalhost.damaquina
a requisição é via POST
como posso resolver isso?
Obrigado!
novembro 21st, 2011 at 10:09 am
it turned out quite interesting to learn to read. I wish to price this page around my weblog. It may possibly? So you et an account provider upon Twitting?
dezembro 12th, 2011 at 8:23 pm
NOSSO BLOG ESTÁ COM O ERRO 503, SERÁ QUE VOLTARÁ A FU8NCIONAR NORMALMENTE, SERÁ QU E VAI DEMORAR?
dezembro 17th, 2011 at 6:30 pm
Itrrrs this that you have searching for high-quality proxies youtube 2012 proxies shopping list with plenty of anonymus no cost of charge common public proxy servers to meet your requirements. Require some of the proxy waiter in which to waters quantity anonymus over the net understand this web site we have now recent proxies selection Next year and also you track down this proxy discomfort youtubeproxy in the following. 2012 Proxy List
janeiro 3rd, 2012 at 2:45 pm
This style is wicked! You surely know how to maintain a reader entertained. Between your wit and your videos, I was nearly moved to begin my own blog (well, nearly…HaHa!) Excellent job. I really enjoyed what you had to say, and more than that, how you presented it. Too cool!