Problema del error 404 OK en PHP

  • Por
Tenemos que asegurarnos que el error 404, de página no encontrada, sea correctamente enviado al navegador para que no le llegue un HTTP/1.x 404 OK.

Hay veces que con PHP queremos enviar un error 404 de página no encontrada, para avisar al navegador que una página no existe. Es sencillo enviar por las cabeceras del http un error 404, pero hay que asegurarse que el código de error esté bien enviado para no dar informaciones ambiguas a los clientes que se conecten al servidor.

Esto es importante porque el código 404 también sirve a los buscadores o motores de búsqueda, para informar que una página no existe. Si damos informaciones ambiguas a los buscadores puede que redunde negativamente en la clasificación de nuestro sitio.

El problema que queremos comentar ahora es el típico error "404 OK". Esto es una ambigüedad: 404 es página no encontrada y OK quiere decir que todo ha ido bien. Pero si no encontró la página ¿Cómo es que decimos que OK? Eso es algo que se puede evitar enviando el error correctamente en la cabecera del HTTP.

Para enviar un código de error 404 por las cabeceras del HTTP con PHP tenemos que hacer lo siguiente:

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

Con la función header() de PHP enviamos información en la cabeceras del http. En este caso hemos enviado una cabecera 404 Not Found. Atención, porque la función header() debe invocarse antes de haber escrito nada en la página, osea, antes de haber enviado ninguna información al navegador.

Pero dependiendo de la configuración de nuestro servidor esto puede funcionar o no.

La mejor manera de saber qué estamos enviando por las cabeceras del http es utilizar un programa que nos muestre las cabeceras que se generan tanto en el cliente como en el servidor. Existen varios programas que nos podrían servir, pero nosotros vamos a recomendar aquí una extensión de Firefox que hemos comentado ya en otro artículo: Ver cabeceras HTTP con LiveHttpHeaders.

Veremos que en algunas ocasiones enviando esta cabecera el navegador recibe un código de error como este:

HTTP/1.x 404 OK

Eso es algo que tenemos que evitar, porque es ambiguo. La cabecera deseable sería:

HTTP/1.x 404 Not Found

Pues bien, cuando la cabecera que generamos es HTTP/1.x 404 OK tenemos que hacer lo siguiente para conseguir el deseado HTTP/1.x 404 Not Found.

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

Primero le indicamos la cabecera del http como 404 y luego lanzamos otra cabecera indicando que el estatus que tiene que enviar es "Not Found". Esto debería funcionar en todos los casos. Es posible que con una sola de las dos cabeceras enviadas nos envíe ya el error 404 Not Found, depende de la configuración de nuestro servidor que necesitemos una u otra. Pero si indicamos las dos en las pruebas que he hecho con varios servidores siempre he recibido el código de error correcto.

Insisto en que lo bueno es que veamos qué cabeceras del HTTP estamos enviando con un producto como LiveHttpHeaders. Así podremos estar seguros de qué cabeceras tenemos que enviar y qué código PHP es el correcto en nuestro caso.

Porque en algunos servidores PHP si enviamos sólo esta cabecera:

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

Nos envía al navegador el código:

HTTP/1.x 200 OK

Por ejemplo, en este caso es todavía peor, porque nosotros habíamos querido enviar un error 404 y en realidad lo que ha llegado al navegador es un 200 OK que quiere decir página encontrada y correcta.

En definitiva, cabe estudiar detalladamente este asunto para asegurarnos que estamos enviando la cabecera correcta y el error 404 es claro.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir