来自 CORS 预检通道的 CORS 标头“Access-Control-Allow-Headers”中缺少令牌“x-auth”[重复]

Posted

技术标签:

【中文标题】来自 CORS 预检通道的 CORS 标头“Access-Control-Allow-Headers”中缺少令牌“x-auth”[重复]【英文标题】:missing token ‘x-auth’ in CORS header ‘Access-Control-Allow-Headers’ from CORS preflight channel [duplicate] 【发布时间】:2019-07-06 21:32:12 【问题描述】:

我想用 post 方法从 axios 包和 xampp 服务器获取数据, 使用 firefox 时出现错误:

跨域请求被阻止:同源策略不允许读取位于http://127.0.0.1/aftab/inventory3/v1/repository/all 的远程资源。 (原因:CORS 预检通道的 CORS 标头“Access-Control-Allow-Headers”中缺少令牌“x-auth”)。[了解更多] 跨域请求被阻止:同源策略不允许读取位于http://127.0.0.1/aftab/inventory3/v1/repository/all 的远程资源。 (原因:CORS 请求没有成功)

但是在 chrome 中测试它可以正常工作并且我没有任何错误,

我的axios请求代码是:

let page = 1;
    let config =
        
            'Content-Type': 'application/x-www-form-urlencoded',
            'x-auth': localStorage.getItem("token"),
        ;
    let data = page: page;
    if (localStorage.getItem("token")) 
        await axios(
            method: "post",
            url: "http://127.0.0.1/aftab/inventory3/v1/repository/all",
            data: data,
            headers: config
        ).then(function (response) 
            console.log(response);
        ).catch(function (error) 
            if (error.response) 
                cosole.log(response);
             else if (error.request) 

               console.log(error.request);
             else 

                console.log('Error', error.message);
            
            console.log(error.config);
        );
     else 
        localStorage.removeItem("token");
        // this.history.push('/log/in');
    

在 Firefox 控制台中:

firefox console

在 Firefox 控制台网络中,仅发送了选项方法,之后我们没有任何请求,但在 chrome 中它工作正常,并且我们在选项方法之后有一个 post 方法请求

【问题讨论】:

似乎 Firefox 无法将 * 识别为 Access-Control-Allow-Headers 的允许值:***.com/questions/52750589/… 【参考方案1】:

将您的配置更改为如下所示

let config =
        
            'Content-Type': 'application/x-www-form-urlencoded',
            'x-auth': localStorage.getItem("token"),
            'Access-Control-Allow-Origin': '*'
        ;

并在您的服务器上启用 cors

【讨论】:

我添加了这个配置并启用了 cors 但我有同样的错误,此外我的代码在 chrome 浏览器中正常工作,这意味着我的代码和配置以及 cors 配置是正确的 当我设置这个配置时,我的错误是:跨域请求被阻止:同源策略不允许读取127.0.0.1/aftab/inventory3/v1/repository/all 的远程资源。 (原因:CORS 预检通道的 CORS 标头“Access-Control-Allow-Headers”中缺少令牌“access-control-allow-origin” 该问题应该通过在服务器上启用此标头和 cors 来解决,我将首先检查此相同请求是否适用于邮递员,如果是,则我将删除“Content-Type”标头或更改它到 'application/json' 并检查 x-auth 标头,因为我不确定您是否接受 x-auth 标头上的令牌 在客户端添加 'Access-Control-Allow-Origin' 没有任何作用。【参考方案2】:

当我们从项目创建构建时,这在 chrome 和 firefox 中都可以正常工作,因为在构建版本的项目选项方法中不发送,我们只有 post 方法并且它适用于所有浏览器,这就像一个错误反应

【讨论】:

【参考方案3】:

我有类似的问题并检查了我的 axios 版本,它是0.18.0 POST 请求工作正常。但是,GET 请求不适用于您提到的类似问题。然后我尝试了测试版。

试试这个 axios 的 beta 版本,即0.19.0-beta.1

https://github.com/axios/axios/tree/v0.19.0-beta.1

在我的情况下它修复了。

 "axios": "0.19.0-beta.1"

注意:如果您打算使用测试版。我希望它应该工作。

【讨论】:

以上是关于来自 CORS 预检通道的 CORS 标头“Access-Control-Allow-Headers”中缺少令牌“x-auth”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

来自 CORS 预检通道的 CORS 标头“Access-Control-Allow-Headers”中缺少令牌“access-control-allow-origin”

CORS - 从 Postman 伪造 CORS 预检无法返回标头

预检请求没问题,然后,经过身份验证,响应不包含允许 cors 标头

修复 AWS API 网关不存在的 CORS“对预检的响应 ...”标头并放大

是否可以向 CORS 预检请求添加请求标头?

CORS,防止带有授权标头的请求预检