【发布时间】:2018-11-26 21:55:00
【问题描述】:
我在我的 ionic 应用程序中使用 Angular 5。我正在尝试从我的代码中调用端点
ngOnInit(): void {
//Called after the constructor, initializing input properties, and the first call to ngOnChanges.
//Add 'implements OnInit' to the class.
this.httpClient.get('https://abc-66b76.cloudfunctions.net/getBillNo', {
headers: {
'Access-Control-Allow-Origin': '*'
}
}).subscribe(data => {
console.log('firebase bill No: ', data);
this.bill.billNo = data.billNo;
})
}
当我的页面加载时,上面的代码被调用并且在 chrome 浏览器控制台中我得到以下错误:
无法加载https://abc-66b76.cloudfunctions.net/getBillNo:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://localhost:8100' 因此不允许访问。
但是,如果我在我的 chrome 浏览器中检查我的网络选项卡,我可以看到它已经访问了服务器并得到了响应。
谁能帮我解决这个问题。
我的后端是 firebase 函数。
【问题讨论】:
-
您是否将
headers: { 'Access-Control-Allow-Origin': '*'}放在request 标头中?这不是 cors 的工作方式,服务器需要在其 response 中发送Access-Control-Allow-Origin: * -
顺便添加该标头会触发 CORS 预检序列 - 如果服务器不处理 CORS 预检,那么您在请求中放置虚假标头的事实可能是您的问题...步骤1,删除请求中的标头...然后查看是否仍然出现CORS错误,如果是,则服务器需要发送该标头
-
However if i check my network tab in my chrome browser i can see that it has hit the server and has got the response.- 是的,因为控制台可以看到的不仅仅是您的代码 - 它是一个有用的调试工具,而不是您的代码可以看到的镜像 -
cors 在浏览器和服务器中的 2 个地方客户端实现..so unitil you get ans disable cors check in browser
-
最初我尝试不使用任何标头.. 默认情况下,服务器设置为响应来自任何来源的请求..
标签: javascript angular firebase cors google-cloud-functions