为啥一个 Firebase 函数被 CORS 阻止了?

Posted

技术标签:

【中文标题】为啥一个 Firebase 函数被 CORS 阻止了?【英文标题】:Why a Firebase Function is blocked by CORS?为什么一个 Firebase 函数被 CORS 阻止了? 【发布时间】:2020-10-16 20:27:03 【问题描述】:

从我自己的域访问 my Function ,该功能将起作用,但客户端收到一个错误,即它被 CORS 阻止。

 exports.registerNewUser = functions.https.onRequest((request, response) => 

我称之为:

 var url = "https://us-central1-xxxxxxxx.cloudfunctions.net/registerNewUser";
       $.get(
               url,
               email : email, userid:userID,
               function(data) ....

我前段时间问过这个问题,我发现用这个包装函数内容,解决了它:

cors(req, res, () => 

我看不到有人这样做,我想知道我是否/为什么真的需要这个,因为文档从来没有提到过类似的东西。 (函数会触发但永远不会发送响应)

从浏览器执行此函数链接效果很好。

【问题讨论】:

其实文档里有提到,见firebase.google.com/docs/functions/… 【参考方案1】:

你所观察到的是预期的,documented。默认情况下,您无法从您加载的网页以外的域访问功能。这是所有浏览器都实现的安全功能。它可以防止恶意代码在其 Web 域的边界之外运行。这就是为什么CORS 是必要的 - 允许这些跨域请求显式发生。

【讨论】:

谢谢道格。 “您无法从加载的网页以外的域访问功能” - 好吧,正如我所说,我正在从我在 Firebase 中注册的自己的域访问它,这就是为什么它仍然很奇怪CORS 阻止了我。 浏览器对域所有权一无所知。它只是查看加载网页的域的名称,并将其与托管 API 的域进行比较。如果名称不完全匹配,则浏览器将拒绝该请求,您需要启用 CORS。

以上是关于为啥一个 Firebase 函数被 CORS 阻止了?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 函数中的 CORS

Firebase https onCall 功能被 cors 阻止

从被 CORS 阻止的 Firebase 托管代码调用 Firebase 函数

Cors 请求阻止的 Firebase 函数

由于 CORS 问题,firebase 托管阻止脚本

被部署在 Firebase Functions 上的快速服务器的 CORS 策略阻止,即使定义了 cors