我用PHP编写了一个Web应用程序,它使用了Ajax请求(使用YUI.util.Connect.asyncRequest进行).
大多数时候,这很好.该请求与一个发送的X-请求-随着的值的XMLHttpRequest.我的PHP控制器代码使用apache_request_headers()来检查传入的请求是否是Ajax,并且一切正常.
但不总是.间歇性地,我遇到了发送Ajax请求的情况(并且Firebug确认请求中的标头包含XML-HttpRequest的X-Requested-With)但是apache_request_headers()没有在其列表中返回该标头.
var_dump apache_request_headers()时的输出如下(注意缺少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)
但是Firebug告诉我:
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
当执行相同的代码时,这种不匹配(显然)是间歇性的.但在软件方面,我不相信"间歇性"!救命!
我不确定为什么apache_request_headers()和firebug不匹配,但为了读取请求头你可以使用$ _SERVER超全局
客户端发送的每个头(并且无论客户端如何)都将到达$ SERVER数组.该标题的关键是HTTP前缀,所有字母大写和短划线都转换为下划线(_)
在您的情况下,您可以找到您的必要价值:
$ _SERVER ['HTTP_X_REQUESTED_WITH'] ='XMLHttpRequest'