PHP 中是否存在 $_SERVER['HTTP_X_REQUESTED_WITH']?

2022-08-30 08:41:19

在整个互联网上,甚至在Stack Overflow中,人们都说检查请求是否是AJAX的一个好方法是执行以下操作:

if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ) {...}

但是,我没有在官方PHP文档中看到$_SERVER['HTTP_X_REQUESTED_WITH']

当我尝试执行以下操作时:

echo $_SERVER['HTTP_X_REQUESTED_WITH'];

不输出任何内容。

我做错了什么吗?因为我真的希望能够在可用的情况下使用。$_SERVER['HTTP_X_REQUESTED_WITH']


答案 1

中的变量并不是 PHP 的真正组成部分,这就是为什么你不会在 PHP 文档中找到它们的原因。它们由 Web 服务器准备,Web 服务器将它们传递给脚本语言。$_SERVER

据我所知,大多数主要框架的Ajax函数都是由Ajax函数发送的,但不是全部(例如,Dojo在两年前才添加它:#5801)。因此,考虑到@bobince的评论,可以肯定地说,确定请求是否为AJAX请求通常不是100%可靠的方法。X-Requested-With

唯一100%安全的方法是发送一个预定义的标志(例如GET变量)以及请求,并为接收页面检查该标志是否存在。


答案 2

不要忘记,您可以轻松地使用cURL欺骗任何标题,如下所示

curl_setopt($ch,CURLOPT_HTTPHEADER,array("X-Requested-With : XMLHttpRequest"));

推荐