Как узнать, что пришел запрос через AJAX

Для того чтобы отличить прямой и AJAX-запрос достаточно проверить значение глобальной переменной $_SERVER['HTTP_X_REQUESTED_WITH'].

$_SERVER['HTTP_X_REQUESTED_WITH']
<?php
if (@$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
	// Обработка AJAX запроса...
}
PHP

Использование данного метода в целях безопасности не имеет ни какого смысла т.к. серверу можно передать любые заголовки, например через cURL.

19.12.2016, обновлено 23.02.2021
8753
Предыдущая запись Как настроить Last-Modified

Комментарии 1

Анна Развозжаева Анна Развозжаева
6 мая 2023 в 00:09
Это вредный совет из эпохи jQuery, который все копипастят не задумываясь.
X-Requested-With - пользовательский HTTP-заголовок. Он не определён никакими стандартами. Когда вы делаете AJAX-запрос современными JavaScript-методами fetch() или new XMLHttpRequest(), этот заголовок отсутствует - если только вы не передали его явно в своём запросе. С равным успехом вы можете передать любой другой заголовок (X-By-Vasya) и ловить его на строное PHP.
Не существует способа надёжно детектировать AJAX-запрос, ничего не зная о запрашивающем скрипте. В теории наиболее правильный способ - ловить заголовок "Accept". Если его значение равно "application/json", можно с вероятностью 100% утверждать, что это либо AJAX-запрос, либо API-запрос. Однако и этот заголовок может отсутствовать, если кодер поленился его задать.

, чтобы добавить комментарий.

Другие публикации

Загрузка файлов через jQuery AJAX
В преведущей статье был приведен пример отправки файлов через AJAX с помощью плагина «jQuery Form Plugin». Но файлы...
55412
+4
Загрузка изображений с превью AJAX + PHP + MySQL
В данной статье представлена упрощенная реализация загрузки изображений с превью через AJAX с сохранением в базу данных...
30820
+22
Подгрузка контента при прокрутке (бесконечная лента)
Пример реализации «Бесконечной ленты» с применением PHP, БД MySQL, и JQuery Ajax.
35104
+16
Кнопка «Показать еще»
Несколько примеров, как сделать AJAX подгрузку записей из базы данных кликом на кнопку «Показать еще».
43748
+1
Массив $_SERVER
Описание значений глобального массива $_SERVER с примерами.
51710
+3
Подключение шрифтов с другого домена
Как и кроссдоменные запросы AJAX, подключение шрифтов с другого домена или поддомена по умолчанию запрещены и вызывают...
10261
+1