Problema do erro 404 OK em PHP

Há vezes que com PHP queremos enviar um erro 404 de página não encontrada, para avisar ao navegador que uma página não existe. É simples enviar pelos cabeçalhos do http um erro 404, mas há que se certificar de que o código de erro seja bem enviado para não dar informações ambíguas aos clientes que se conectem ao servidor.

Isto é importante porque o código 404 também serve aos buscadores ou motores de busca, para informar que uma página não existe. Se damos informações ambíguas aos buscadores pode ser que redunde negativamente na classificação de nosso site.

O problema que queremos comentar agora é o típico erro “404 OK”. Isto é uma ambiguidade: 404 é página não encontrada e OK significa que tudo foi bem. Contudo, se não encontrou a página, como podemos dizer OK? Isso é algo que pode ser evitado enviando o erro corretamente no cabeçalho do HTTP.

Para enviar um código de erro 404 pelos cabeçalhos do HTTP com PHP temos que fazer o seguinte:

<?
header(“HTTP/1.0 404 Not Found”);
?>

Com a função header() de PHP enviamos informação no cabeçalho do http. Neste caso enviamos um cabeçalho 404 Not Found. Atenção, porque a função header() deve ser invocada antes de se escrever qualquer coisa na página, ou seja, antes de termos mandado qualquer informação ao navegador.

Porém, dependendo da configuração de nosso servidor isto pode funcionar ou não.

A melhor maneira de sabermos o que estamos enviando pelos cabeçalhos do http é utilizando um programa que nos mostre os cabeçalhos que são gerados tanto no cliente quanto no servidor. Existem vários programas que podem servir, mas aqui vamos recomendar uma extensão de Firefox que já comentamos em outro artigo: Ver cabeçalhos HTTP com LiveHttpHeaders.

Veremos que em algumas ocasiões enviando este cabeçalho o navegador recebe um código de erro como este:

HTTP/1.x 404 OK

Isso é algo que temos que evitar, porque é ambíguo. O cabeçalho desejável seria:

HTTP/1.x 404 Not Found

Bem, quando o cabeçalho que geramos é HTTP/1.x 404 OK temos que fazer o seguinte para conseguir o desejado HTTP/1.x 404 Not Found.

<?
header(“HTTP/1.0 404 Not Found”);
header(“Status: 404 Not Found”);
?>

Primeiro indicamos o cabeçalho do http como 404 e em seguida lançamos outro cabeçalho indicando que o status que deve enviar é “Not Found”. Isto deveria funcionar em todos os casos. É possível que com apenas um dos dois cabeçalhos enviados nos mande já o erro 404 Not Found, vai depender da configuração de nosso servidor que necessitemos um ou outro. Porém, se indicamos os dois, nos testes que fiz com vários servidores sempre recebi o código de erro correto.

Insisto em que o bom é que vejamos que cabeçalhos do HTTP estamos enviando com um produto como LiveHttpHeaders . Assim, podemos estar seguros de que cabeçalhos temos que enviar e que código PHP é o correto no nosso caso.

Porque em alguns servidores PHP se enviamos só este cabeçalho:

<?
header(“Status: 404 Not Found”);
?>

É enviado ao navegador o código:

HTTP/1.x 200 OK

Por exemplo, neste caso é ainda pior, porque nós queríamos ter enviado um erro 404 e na realidade o que chegou ao navegador foi um 200 OK que quer dizer página encontrada e correta.

Concluindo, vale estudar detalhadamente este assunto para nos assegurarmos de que estamos enviando o cabeçalho correto e o erro 404 está claro.

Fonte: http://www.criarweb.com/artigos/problema-do-erro-404-em-php.html

Deixe um comentário