已被CORS策略阻止:对预检请求的响应未通过访问控制检查:否'Access
[我正在从http://localhost:8080在本地运行Vue应用程序,但不断出现CORS错误,我添加了Access-Control-Allow-Origin标头,但受到打击,但始终收到以下警告:
来自源[http://localhost:8080'的'已被CORS策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上没有'Access-Control-Allow-Origin'标头。如果不透明的响应满足您的需求,请将请求的模式设置为“ no-cors”以在禁用CORS的情况下获取资源。
const graphCall = () => {
let tokenOptions = {
method: 'POST',
uri: '/**key**/oauth2/v2.0/token',
headers: {
'Access-Control-Allow-Origin': 'http://localhost:8080',
'contentType': 'application/x-www-form-urlencoded'
},
form: {
grant_type: VUE_APP_GRANT_TYPE,
client_secret: VUE_APP_CLIENT_SECRET,
scope: VUE_APP_SCOPE,
client_id: VUE_APP_CLIENT_ID
}
};
return rp(tokenOptions)
.then(data => {
console.log(data)
}).catch((err) => {
console.log(err);
});
};
我尝试添加模式:'no-cors',但仅获得以下内容-错误:opts.mode的值无效
我也尝试过将'*'作为访问控制源,但无济于事。
是否有办法解决这个CORS噩梦,因为我们需要打这个电话来检索密钥!
回答如下:服务器必须允许您的来源,在这种情况下为http://localhost:8080。通常,在与提供程序进行交互的情况下,在创建令牌的管理门户中,还必须指定要从中调用它的域。
如果不是这种情况,您可能会触发CORS,因为您使用的标头不在CORS安全列表中。https://fetch.spec.whatwg/#cors-safelisted-request-header
Access-Control-Allow-Origin
通常是服务器在响应中提供的标头,并不意味着应在请求上发送它。
以下链接帮助我更好地了解了CORS。https://developer.mozilla/en-US/docs/Web/HTTP/CORS
请注意,允许*
的来源对于开发是很好的,但对于生产应用程序则不建议这样做。