【发布时间】:2020-10-26 16:55:25
【问题描述】:
我有一个 Python(带有 uvicorn 的 FastAPI)应用程序在 Google Cloud Run(完全托管版本)的 Docker 容器中运行。我还有一个在 Firebase 上运行的单独的网络应用程序,它使用 Firebase 托管。我想使用 Firebase 托管将 Cloud Run 容器与 Firebase 应用集成。我按照https://firebase.google.com/docs/hosting/cloud-run 中的说明设置了托管配置。
"rewrites": [
{
"source": "/api/**",
"run": {
"serviceId": "myapp",
"region": "us-central1"
}
},
{
"source": "**",
"destination": "/index.html"
}
]
我的 Firebase 应用使用以下代码调用 API
const requestOptions = {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({payload : payload, temperature: temperature})
}
fetch('/api/generate', requestOptions)...
但是,当我尝试这样做时,我从浏览器控制台收到以下错误:
Mixed Content: The page at 'https://mydomain.web.app/' was loaded over HTTPS, but requested an insecure resource 'http://myapp-somerandomhash-uc.a.run.app/api/generate'. This request has been blocked; the content must be served over HTTPS.
(假设 Firebase 应用托管在 https://mydomain.web.app 上,Cloud Run 应用托管在 https://myapp-somerandomhash-uc.a.run.app 上)
当前行为:
- Firebase 应用调用 https://mydomain.web.app/api/generate
- Firebase 托管将其重定向到 http://myapp-somerandomhash-uc.a.run.app/api/generate
- (我收到上述错误)
- Cloud Run 容器应用再次将其重定向到 https://myapp-somerandomhash-uc.a.run.app/api/generate
期望的行为:
- Firebase 应用调用 https://mydomain.web.app/api/generate
- 无需显式重定向或重定向到 https 版本即可获得响应
来自 Cloud Run 的日志:
INFO: 169.254.8.129:21990 - "POST /api/generate HTTP/1.1" 307 Temporary Redirect
POST 307 314 B 8ms Chrome 83 https://myapp-somerandomhash-uc.a.run.app/api/generate
关于如何解决这个问题有什么建议吗?
【问题讨论】:
-
你希望它做什么?您是否能够跟踪对容器的调用,如果可以,它对请求做了什么?
-
@DougStevenson 我打算将云运行容器应用程序用作 Firebase 前端应用程序的 API 后端。但是,由于提到的“混合内容”错误,我无法从 firebase 应用调用容器 API。
-
我明白这一点。当您请求该 URL 时,除了您正在观察的重定向之外,您期望会发生什么?请编辑具体问题,并显示任何相关代码和日志。
-
@DougStevenson 我希望在容器上调用 https 端点而不是 http。
-
请编辑问题以明确究竟应该发生什么。听起来你在期待一个特定的响应,但我们需要知道那是什么,以及发送它的代码。您的问题应该包含足够的信息,以便任何人都可以重现。
标签: firebase firebase-hosting google-cloud-run