答案 0 :(得分:3)
没有可靠的方法来区分使用Fetch API发出的请求与使用XHR或某些AJAX库发出的请求。 Fetch API不会导致发送任何唯一标头。
如果您只是想检测某个请求是否可能来自浏览器中运行的前端代码,您可以检查Origin
标头。浏览器会将Origin
标头添加到所有跨源GET
请求中。因此,如果GET
请求来自浏览器的同源,则不会Origin
。
浏览器会针对同源ORIGIN
请求发送POST
,而不仅仅是跨域POST
请求。
浏览器也会针对使用XHR发出的请求发送ORIGIN
,而不仅仅是来自Fetch API的请求。
因此,没有可靠的方法在服务器端检测是否使用Fetch API发出了请求。
顺便提一下,如果您正在检查X-Requested-With
请求标头,那么所有要告诉您的是,请求可能是使用常见的第三方AJAX 库而不是直接使用XHR或Fetch API。那是因为X-Requested-With
不是标准(这就是为什么它的名字以 X-
开头)并且从不由浏览器本身发送,而是由主要库发送。
所以我想如果你不看到X-Requested-With
请求标头,那么至少你知道请求可能不是由代码使用任何AJAX方法发送的任何主要的图书馆,但这只意味着它也可以从curl
或其他东西而不是浏览器发送。
如果您看到Origin
请求标头但未看到X-Requested-With
请求,那么至少您知道该请求可能是从浏览器发送但未使用主要库 - 尽管它仍有可能仍然存在可以使用curl
或其他任何方式发送,是否有人手动为请求添加了Origin
标头。
答案 1 :(得分:0)
添加到获取选项 标头:{'X-Requested-With':'XMLHttpRequest'}