这是检测AJAX请求的最可靠方法,还是在我的jQuery.AJAX代码中添加自定义标头更安全?
function isAjaxRequest() {
if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
return TRUE;
}
}
return FALSE;
}
我非常关心旧的浏览器和旧的PHP安装,因为我想让我的代码在尽可能多的情况下工作。
这是检测AJAX请求的最可靠方法吗
这几乎和你可能得到的一样确定。
还是在我的jQuery.ajax代码中添加自定义头更安全?
为什么重复努力?jQuery已经在添加该自定义标头。
忘记让服务器关心"Ajax"answers"Not Ajax"之间的区别,而不是关心(例如)"Want JSON"answers"Want HTML",会更干净。
您可以为此使用HTTP Accept标头。
没有安全的方法来检测Ajax请求
Ajax请求具有与GET/POST正常页面视图相同的模式。
以X_
开头的HTTP头是自定义字段,甚至没有在每个Ajax库中实现。
你不应该依赖这些信息,因此实现你想要实现的完全不同的方式。
我确实喜欢旧的浏览器和旧的PHP安装使我的代码在尽可能多的情况下工作。
如果这是你的目标,那就忘了头球。
最好和最短的答案就在我的旁边,来自Quentin:
忘记让服务器关心"Ajax"answers"非Ajax"之间的区别,而不是关心(例如)"想要JSON"answers"想要HTML"。
在互联网上,你根本无法问"你从哪里来,坐过哪趟车"并得到可靠的答案。互联网的设计并不是为了解决这种问题
public function getIsAjaxRequest()
{
return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest';
}