如何判断页面是否是从fetch()调用的


How to tell if page is being called from a fetch()?

使用jQuery,Ajax函数设置头HTTP_X_REQUESTED_WITH,因此使用PHP我可以执行:

if(filter_input(INPUT_SERVER, 'HTTP_X_REQUESTED_WITH') === 'XMLHttpRequest')
{ ... }

这将告诉我该页面是使用Ajax请求的。

现在我想将Ajax函数更改为fetch()。我已经查看了它设置的默认标头,但找不到任何可以用来判断请求是否是从fetch发送的信息。

我可以自己设置标题:

fetch('/get/login', {
    headers: {
        'X-Requested-With': 'fetch',
    },
})
.then(function(response) { ... }

然而,为每次获取都写出该标头并不理想。我有什么选择?有没有更好的方法来判断请求是否是通过提取发出的?

不,没有其他可以依赖的东西。

从理论上讲,您不应该根据请求方法给服务器不同的行为;应该与系统后端定义的内容正交。

但是,如果你绝望了,我非常喜欢你现有的解决方案;为了简洁起见,您可以将其封装在一个函数中。

由于您依赖客户端来传递数据,您不能在主体内部传递POST变量吗?通过javascript传递头并不比简单地传递一个额外的字段更安全。(https://davidwalsh.name/fetch)

fetch('/get/login', {
    body: JSON.stringify({
        source: : "fetch"
    }),
})
.then(function(response) { ... }