在整个Internet上,甚至在Stack Overflow上,人们都表示,检查请求是否为AJAX的一个好方法是执行以下操作:
if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ) {...}
但是,我在official PHP documentation中没有看到$_SERVER['HTTP_X_REQUESTED_WITH']
当我尝试执行以下操作时:
echo $_SERVER['HTTP_X_REQUESTED_WITH'];
不会输出任何内容。
我做错了什么吗?因为我真的希望能够使用$_SERVER['HTTP_X_REQUESTED_WITH']
,如果它可用的话。
发布于 2010-04-05 23:41:45
$_SERVER
中的变量实际上并不是PHP的一部分,这就是为什么您在PHP文档中找不到它们的原因。它们是由Web服务器准备的,Web服务器将它们传递给脚本语言。
据我所知,X-Requested-With
是由大多数主要框架的Ajax函数发送的,但不是全部(例如,Dojo在两年前才添加了它:#5801)。因此,考虑到@bobince的评论,可以肯定地说,它通常不是一个100%可靠的方法来确定一个请求是否是一个AJAX请求。
唯一100%安全的方法是与请求一起发送一个预定义的标志(例如GET变量),并让接收页面检查该标志的存在。
发布于 2011-02-25 02:50:25
不要忘记,您可以很容易地使用cURL欺骗任何标头,如下所示
curl_setopt($ch,CURLOPT_HTTPHEADER,array("X-Requested-With : XMLHttpRequest"));
发布于 2010-04-05 23:40:21
以HTTP_
开头的HTTP键是从$_SERVER
请求头部生成的。在本例中,是指X-Requested-With
标头。
https://stackoverflow.com/questions/2579254
复制相似问题