El HTTP/1.1 RFC estipula que "El método HEAD es idéntico a GET, excepto que el servidor NO DEBE devolver un cuerpo del mensaje en la respuesta". Sé que Apache rinde homenaje al RFC, pero los módulos no tienen por qué hacerlo. Mi pregunta es, ¿mod_php5 lo honra?¿Mod_php respeta las solicitudes HEAD correctamente?
La razón que pido es porque me encontré con un artículo que decía que los desarrolladores de PHP deben comprobar por sí mismos con:
if (stripos($_SERVER['REQUEST_METHOD'], 'HEAD') !== FALSE) {
exit();
}
Busqué en Google un segundo y no mucho hacia arriba, aparte de algunas personas diciendo que tratan a cosas extrañas como mod_rewrite/redirect después de recibir solicitudes HEAD y algún ticket viejo de errores como 2002, alegando que mod_php todavía ejecutó el resto del script de manera predeterminada. Así que acaba de ejecutar una prueba rápida mediante el uso de los PECL :: HTTP para ejecutar
http_head('http://mysite.com/test-head-request.php');
mientras que tener:
<?php error_log('REST OF SCRIPT STILL RAN'); ?>
en la prueba de la cabeza request.php para ver si el resto del guión todavía ejecutado y no fue así
Me imagino que debería ser suficiente para resolverlo, pero quiero obtener más comentarios y tal vez ayudar a aclarar la confusión para cualquier otra persona que se haya preguntado sobre esto. Entonces, si alguien sabe lo que piensa (sin juego de palabras), o tiene convenciones que usan para recibir solicitudes HEAD, sería genial. De lo contrario, voy a grep la fuente C más tarde y responderé en un comentario con mis hallazgos. Gracias.
Sí, si coloca el encabezado ('Foo:'. $ _ GET ['encabezado']); error_log ('prueba'); en la parte superior de la secuencia de comandos devuelve ese encabezado/valor y registros. Si coloca ese código en un búfer de salida en el cuerpo HTML, ninguno se ejecutará. Así que PHP parece no solo no devolver el cuerpo del mensaje, ni siquiera lo procesa. Continuaré saliendo; después de todas mis llamadas de encabezado(). Gracias – rkulla
Me alegro de poder ayudar. – webbiedave
@rkulla El código PHP subyacente siempre se ejecuta de la misma manera que una solicitud GET. Tal vez revise sus registros de errores si no es así. – Phil