Обнаружить запрос на выборку в переполнении стека

Как я могу обнаружить запросы от Получить API в PHP?
В настоящее время я использую подход ниже, чтобы обнаружить запрос AJAX:

$context['isAJAX'] = (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');

В идеале я мог бы обнаружить запросы Fetch таким же образом. У кого-нибудь есть какие-либо методы для достижения этой цели?

1

Решение

Не существует надежного способа отличить запрос, выполненный с использованием API Fetch, от запроса, сделанного с использованием XHR, или от какой-либо библиотеки AJAX. Fetch API не вызывает отправку каких-либо уникальных заголовков.

Если вы просто хотите определить, был ли запрос сделан из кода внешнего интерфейса, запущенного в браузере, вы можете проверить Origin заголовок. Браузеры добавляют Origin заголовок для всех перекрестных источников GET Запросы. Так что если GET запрос был сделан тем же источником из браузера, он не будет иметь Origin,

И браузеры отправляют ORIGIN для того же происхождения POST запросы, а не только перекрестного происхождения POST Запросы.

И браузеры отправляют ORIGIN для запросов, сделанных с помощью XHR, а не только запросов от Fetch API.

Таким образом, на стороне сервера нет надежного способа определить, был ли сделан запрос с помощью API Fetch.

Кстати, если вы проверяете X-Requested-With заголовок запроса, все что вам скажут, это, вероятно, запрос был сделан с помощью обычного стороннего AJAX библиотека вместо того, чтобы напрямую с XHR или Fetch API. Это потому что X-Requested-With не является стандартом (поэтому его название начинается с X-) и никогда не отправляется непосредственно самими браузерами, а ведущими библиотеками.

Так что я думаю, если вы не увидеть X-Requested-With заголовок запроса, тогда, по крайней мере, вы знаете, что запрос, вероятно, не был отправлен кодом с использованием каких-либо методов AJAX в любой из основных библиотек, хотя это просто означает, что он также мог быть отправлен из curl или что-то вместо браузера.

И если вы видите Origin заголовок запроса, но не X-Requested-With запрос, по крайней мере, вы знаете, что запрос, вероятно, был отправлен из браузера, но не с использованием основной библиотеки — хотя есть некоторая возможность, что он все еще мог быть отправлен с curl или кто-то еще, кто-то вручную добавил Origin заголовок к запросу.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]