在 Firebase 上提供的 Angular 上的 CORS 锁定 HTTP 请求到 Elasticsearch 服务器 [重复]

Posted

技术标签:

【中文标题】在 Firebase 上提供的 Angular 上的 CORS 锁定 HTTP 请求到 Elasticsearch 服务器 [重复]【英文标题】:CORS locking HTTP request to Elasticsearch server on Angular served on Firebase [duplicate] 【发布时间】:2019-05-07 06:21:59 【问题描述】:

首先,我确定这是一个重复的问题,但我离网络技术人员有点远,并且无法理解 CORS 到底是什么,为什么它会阻止一个简单的 HTTP 请求以及如何我可以绕过它吗?

我正在尝试创建一个 Angular 5 + Node.js 网络应用程序,托管在 Firebase Hosting 上,并在 Google Cloud Platform 上拥有一个 Elasticsearch 实例。我需要做的就是从这个 Web 应用程序向 ES 实例发送 2 个非常基本的 HTTP 请求。我已经从移动应用程序和 Postman 应用程序发送这些请求,没有问题。但网络应用程序记录 Preflight response is not successful 错误。我用谷歌搜索了这个错误,发现它是由 CORS 抛出的。正如我所说,我不知道 CORS 到底是什么以及如何绕过它。请提供任何帮助(对非网络开发人员的简单帮助)。谢谢。

【问题讨论】:

【参考方案1】:

简而言之,CORS(跨域资源共享)是浏览器默认强制实施的一种安全机制,它指定您的应用程序可以使用哪些资源(在哪些服务器上)(发出请求)。这是对 CORS 的一个很好的解释 - https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS。

因此,您必须在服务器上将应用程序的域设置为允许进行调用的域之一。如果这样做,预检请求将返回一个 Access-Control-Allow-Origin 标头集,并且浏览器允许发送实际请求。

您可以在此处查看如何在 Firebase 中执行此操作 - https://groups.google.com/forum/#!msg/firebase-talk/oSPWMS7MSNA/RnvU6aqtFwAJ

【讨论】:

实际上,即使有您的帮助和重复的问题,我仍然无法使其工作。但是我想如果它抱怨跨域,我可以设置一个子域。所以我做了并从 Let'sEncrypt 创建了一个 SSL 证书,创建了一个 CronJob 来自动更新它。所以现在可以了。

以上是关于在 Firebase 上提供的 Angular 上的 CORS 锁定 HTTP 请求到 Elasticsearch 服务器 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Firebase 云功能为带有 i18n 的 Angular 10 s-s-r 通用应用程序提供服务

在 Firebase 上重新加载 Angular 页面时找不到页面

等到在 ionic-angular 的 firebase 上触发触发器

在 Angular 11 网站上使用 Firestore 和 Firebase 存储进行图像上传功能导致来自 Firebase 的不安全规则通知

在 Firebase 上部署 Angular 8 Universal (s-s-r) 应用程序

Angular 8,Firebase 推送通知:无法在推送通知上获取调试器或自定义逻辑