content - php response headers
PHP apache_request_headers() diagrees con realidad(según lo confirmado por Firebug): ¿por qué? (4)
No estoy seguro de por qué apache_request_headers () y Firebug no coinciden, pero para leer los encabezados de solicitud puede usar el $ superSERVER global
cada encabezado que está siendo enviado por un cliente (y no importa cómo es el cliente) llegará a la matriz $ SERVER. La clave de ese encabezado será con el prefijo HTTP , todas las letras mayúsculas y el guión se convierten en guión bajo (_)
en su caso puede encontrar su valor necesario en:
$ _SERVER [''HTTP_X_REQUESTED_WITH''] = ''XMLHttpRequest''
He escrito una aplicación web en PHP que hace uso de las solicitudes de Ajax (realizadas con YUI.util.Connect.asyncRequest).
La mayoría de las veces, esto funciona bien. La solicitud se envía con un valor X-Requerido-Con de XMLHttpRequest . Mi código de controlador PHP usa apache_request_headers () para verificar si una solicitud entrante es Ajax o no y todo funciona bien.
Pero no siempre. De forma intermitente, aparece una situación en la que se envía la solicitud Ajax (y Firebug confirma que los encabezados de la solicitud incluyen X-Requerido-Con de XMLHttpRequest) pero apache_request_headers () no está devolviendo ese encabezado en su lista.
El resultado de cuando var_dump apache_request_headers () es el siguiente (tenga en cuenta la falta de X-
''Host'' => string ''peterh.labs.example.com'' (length=26)
''User-Agent'' => string ''Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.3) Gecko/2008101315 Ubuntu/8.10 (intrepid) Firefox/3.0.3'' (length=105)
''Accept'' => string ''text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'' (length=63)
''Accept-Language'' => string ''en-gb,en;q=0.5'' (length=14)
''Accept-Encoding'' => string ''gzip,deflate'' (length=12)
''Accept-Charset'' => string ''ISO-8859-1,utf-8;q=0.7,*;q=0.7'' (length=30)
''Keep-Alive'' => string ''300'' (length=3)
''Connection'' => string ''keep-alive'' (length=10)
''Referer'' => string ''http://peterh.labs.example.com/qmail/'' (length=40)
''Cookie'' => string ''WORKFLOW_SESSION=55f9aff2051746851de453c1f776ad10745354f6'' (length=57)
''Pragma'' => string ''no-cache'' (length=8)
''Cache-Control'' => string ''no-cache'' (length=8)
Pero Firebug me dice:
Request Headers:
Host peterh.labs.example.com
User-Agent Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.0.3) Gecko/2008101315 Ubuntu/8.10 (intrepid) Firefox/3.0.3
Accept text/html,application/xhtml+xml,application/xml;q=0.9,**;q=0.8
Accept-Language en-gb,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
X-Requested-With XMLHttpRequest
Referer http://peterh.labs.example.com/qmail/
Cookie WORKFLOW_SESSION=55f9aff2051746851de453c1f776ad10745354f6
Esta falta de coincidencia es (aparentemente) intermitente cuando se ejecuta el mismo código. ¡Pero no creo en "intermitente" cuando se trata de software! ¡Ayuda!
No puedo responder específicamente este caso, pero en general recomendaría usar un parámetro (consulta) para señalar las solicitudes xmlhttp, en lugar de un encabezado. Nunca se sabe qué seguridad graciosa o qué servidor proxy podría tomar sobre sí mismo para manipular encabezados HTTP, o para almacenar en caché una respuesta AJAX que debería haber sido una simple respuesta HTML del navegador (o viceversa).
Verifique que el encabezado que falta no se encuentre en el $_SERVER
superglobal. En general, no confiaría en apache_ * si realmente tuviera que hacerlo.
En una nota lateral, ¿X-Solicitado-Con el estándar todavía? He leído sobre varias bibliotecas que lo agregan, pero no sabía que se convirtió en el estándar todavía.
Para referencia futura de aquellos que se encuentran con esta pregunta, el "intermitente" puede deberse a una redirección que ocurre en el lado del servidor. Si se produce un redireccionamiento 302, el encabezado X-Requerido-Con no se transfiere aunque se haya enviado en la solicitud original. Esta pudo haber sido la causa original del problema.