A Internet é suportada pelo protocolo HTTP, em que um cliente solicita um pedido ao servidor e este retorna um resultado. Este resultado deve sempre vir com um código numérico e, opcionalmente, algum conteúdo extra (como exemplo: podem ser instruções no cabeçalho do pacote de resposta, como uma solicitação para o cliente redirecionar para outro arquivo, ou o conteúdo de um arquivo HTML para ser renderizado no cliente).
É importante conhecer os principais códigos HTTP e utilizá-los da maneira correta, pois eles podem afetar a reputação de seu site.
O formato dos códigos de retorno HTTP
Os códigos de retorno HTTP são números com 3 dígitos que possuem um formato que auxilia na identificação do tipo de retorno. Os formatos e os respectivos tipos de retorno são:
- 1xx (códigos iniciados em "1") - Resultados Informativos
- 2xx (códigos iniciados em "2") - Resultados de Sucesso
- 3xx (códigos iniciados em "3") - Instruções de Redirecionamento
- 4xx (códigos iniciados em "4") - Resultados de Erro do Cliente
- 5xx (códigos iniciados em "5") - Resultados de Erro do Servidor
A lista completa de códigos de retorno HTTP pode ser obtida no site do W3C: Status Code Definitions.
Principais códigos de retorno HTTP
Embora existam muitos códigos de retorno, você provavelmente não precisará utilizar ou conhecer todos a fundo. Alguns deles são utilizados pelo próprio servidor HTTP (como o Apache), quando encontra algumas situações. Por exemplo, se você tem um site e solicita ao servidor um arquivo inexistênte (e não possui regras de reescrita de url para fazer urls amigáveis), o próprio servidor retorna o código 404, indicando página não encontrada.
Os principais códigos de retorno HTTP que você deve conhecer e seus respectivos significados são:
- 200 - Código de sucesso. Normalmente é retornado automaticamente pelo servidor HTTP ao encontrar o arquivo ou processar um script PHP que não possui instruções que modificam o código de retorno HTTP.
- 301 - Conteúdo movido permanentemente. É usado quando um documento mudou de lugar (físico ou virtual), ou seja, a forma de acessá-lo passou a ser outra permanentemente. Isso significa que a URL não é mais válida (não existe mais documento naquela URL) e deve ser utilizada a nova URL para acesso.
- 307 - Conteúdo temporariamente redirecionado. É usado pelos "redirects" simples (quando se utiliza a diretiva HTTP "Location" no PHP). Isso significa que a URL acessada é a que deverá continuar sendo acessada, mas o cliente deve seguir para outra URL provisoriamente.
- 404 - Conteúdo não encontrado. Deve ser usado quando a URL solicitada não representa um documento existente.
- 500 - Erro interno do servidor. Normalmente é retornado automaticamente por alguns servidores HTTP, quando ocorre algum erro inesperado do servidor.
- 503 - Serviço temporariamente indisponível. Deve ser usado quando o servidor está muito sobrecarregado ou quando o servidor está em manutenção. Significa que o documento existe, mas que não é o retornado naquele momento.
A influência dos códigos de retorno HTTP sobre os buscadores
Agora que vimos alguns códigos de retorno HTTP importantes, precisamos conhecer em que eles influenciam os buscadores como o Google. Aliás, o próprio Google tem um documento que fala sobre isso em HTTP status codes.
Código 404
O código 404 deve ser retornado pelo servidor HTTP quando a URL solicitada não existe e, portanto, não deve ser indexada. Então se você tem um site com muito conteúdo, mas pretende mudar a forma como eles são acessados, ou seja, mudar a URL (seja o domínio, ou o path, query string, etc.) então é importante que você utilize o código 301 para que o cliente que acessar um documento pela URL antiga seja redirecionado para a URL nova. Isso vale para os robôs de busca, ou seja, você informa que a URL mudou permanentemente. Isso evita que todo seu conteúdo seja "desindexado", ou perca relevância anteriormente conquistada.
Se o seu código PHP entrou em alguma exceção, erro fatal, ou algo do gênero, você não deve retornar o código 404, pois o documento existe, só não pode ser retornado adequadamente devido a um problema provavelmente temporário. Neste caso, o ideal é usar o código 503, indicando que o serviço está temporariamente indisponível.
Código 200
O código 200 deve ser retornado pelo servidor HTTP quando a URL solicitada existe e está disponível para ser entregue corretamente. Isso não significa que o documento será indexado pelos robôs de busca, já que estes podem verificar o valor da meta tag "robots" para determinar se devem ou não indexar o documento.
Código 503
O código 503 deve ser retornado pelo servidor HTTP quando a URL solicitada existe, mas não está disponível para ser entregue. Por exemplo, se o site está em manutenção ou está sobrecarregado. Com isso, você pode exibir uma mensagem explicando a situação ao usuário, mas esta mensagem não será indexada pelos robôs de busca. Quando os robôs de busca acessam uma URL e recebem este código eles apenas desconsideram o documento apresentado e continuam com o documento que estava indexado da forma que estava.
Modificando o código de retorno HTTP pelo PHP
Em PHP, a função header é usada para definir diretivas do cabeçalho do pacote HTTP que será devolvido ao cliente. Por esta função, é possível modificar o código de retorno HTTP, conforme o exemplo:
// Realizando um redirecionamento permanente header('HTTP/1.1 301 Moved Permanently'); header('Location: http://www.teste.com.br/outro_script.php'); exit(0);
Ou seja, o conteúdo passado para a função deve começar com "HTTP/", seguido da versão do protocolo HTTP utilizado, seguido do código de retorno HTTP e seguido da mensagem humana para o código de retorno.
A partir do PHP 5.4.0, existe uma função mais conveniente e prática para este propósito, que é a http_response_code. Veja como fica o exemplo anterior:
// Realizando um redirecionamento permanente http_response_code(301); header('Location: http://www.teste.com.br/outro_script.php'); exit(0);
6 comentários
Um código importante também é o 400. Ele não é muito usado mas deveria. Por exemplo, um formulário enviado com dados incorretos deve retornar 400 como código de retorno (lembrando que código de retorno != conteudo de retorno).
:)
Olá Diego,
Obrigado pela contribuição, embora eu discorde da sua colocação. Observando a descrição do código 400, diz o seguinte:
"The request could not be understood by the server due to malformed syntax"
PT-BR: "A requisição não pôde ser compreendida pelo servidor devido a problemas de sintaxe"
Ou seja, este código deve ser retornado quando a requisição HTTP estiver com algum erro de sintaxe e não quando o cliente da aplicação digitou algo errado.
É preciso separar o que é cliente da aplicação (usuário que loga no sistema e realiza operações nele) do cliente web (que é normalmente o navegador web trocando pacotes de dados com o servidor).
Numa aplicação web, normalmente os dados enviados do cliente para o servidor são feitos pelo navegador web, que procura seguir a risca a sintaxe do protocolo. Porém, quando há interação entre scripts, diretamente via socket, pode ser que o script envie uma solicitação HTTP incorreta, como no exemplo abaixo:
GET /index.php HTTP\1.1
Host: rubsphp.blogspot.com.br
Observe que o HTTP\1.1 está com a barra invertida. Deveria ser HTTP/1.1. Com isso, o próprio servidor apache já te retorna o código 400.
Gostaria de saber se esses códigos influenciam diretamente nas portas de uma host... ?
Se o servidor responder com o código 200 isso significa que terei alguma porta aberta, a 80 por exemplo? Uso métodos VPN por isso quero tirar essa dúvida. Desde já. . Obrigada!
Aline, se você realizar uma requisição HTTP na porta 80 de um servidor e ele devolver uma resposta HTTP (independente do código), quer dizer que há um servidor Web alí respondendo. Portanto, a porta 80 está aberta. Não conheço tanto de VPN, mas no meu entendimento, se você está conectada a uma VPN e faz a requisição que recebe uma resposta, então a porta está liberada para aquela VPN, mas não necessariamente a rede externa.
Gostaria de saber sobre como faço para fazer uma requisição desses codigos para me retornar o valor 200 para um site específico.
Wesley,
Uma das formas de se realizar requisições HTTP é com o comando "curl". Pesquise sobre ele.
Postar um comentário
Nota: fique a vontade para expressar o que achou deste artigo ou do blog.
Dica: para acompanhar as respostas, acesse com uma conta do Google e marque a opção "Notifique-me".
Atenção: o blogger não permite inclusão de tags nos comentários, por isso, use algum site externo para postar seu código com dúvidas e deixe o link aqui. Exemplo: pastebin.com