gpt4 book ai didi

https - 运行 dockerised FastAPI 应用程序时的 CORS 问题

转载 作者:行者123 更新时间:2023-12-04 04:16:05 29 4
gpt4 key购买 nike

我有一个 fastapi 应用程序运行和工作得很好。我想使用我的 fastapi 应用程序作为部署在 Firebase 托管 (https) 上的 React 前端的后端。在本地运行(http fastpi 和 react)我通过在 FastAPI 中启用 CORS 使其工作

from starlette.middleware.cors import CORSMiddleware

app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
但是当我部署时,我意识到我无法将 fastapi 作为 HTTP 提供,因为我的前端是 HTTPS。我继续在 Google Cloud 中创建了一个 kubernetes 集群并进入了我的 dockerised fastapi 应用程序(暴露为 HTTPS)。当我 curl 到我的 HTTPS fastapi 端点时,这有效,但我在我的 react 应用程序中再次遇到 CORS 问题,这次我不知道如何解决它。为什么以上不再适用?
CORS 错误是

Access to fetch at 'https://my-api-domain' from origin 'https://my-frontend-domain' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.


编辑
我只是做了一些进一步的调查,我可以得出结论,如果我在本地运行我的容器 docker run然后 access-control-allow-origin在标题中正确返回。但是当部署在 GKE 上时,就没有 access-control-allow-origin .
更新
我试过安装 nginx 入口而不是 GKE 入口,但这使全局静态 IP 和谷歌托管证书方面的事情变得复杂。我需要一个可以给我的解决方案
  • 全局静态 IP(可以使用 GKE 入口)
  • Google 托管证书(适用于 GKE 入口)
  • 启用 CORS(使用 nginx 入口可以)

  • 所以我卡住了 atm!
    最新更新
    我正在将 Nginx 入口 Controller 与 cert-manager 一起使用它就像一个魅力。奖励信息:使用 skaffold 和 kustomize 运行所有东西 - 这么多很棒的工具

    最佳答案

    发布此信息 Community Wiki以获得更好的可见性,因为在 comment section 中提到了解决方案.
    如果您想使用 CORSGoogle Cloud Platform , 你必须使用 Nginx Ingress和具体 GCP注解。您可以在 this SO thread 中找到有关此的更多详细信息

    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/enable-cors: "true"
    解决方案
    这个问题的解决方案是使用 Nginx Ingress ControllerCert-Manager带有适当的注释。
    OP也确认它正在工作。

    I'm using Nginx Ingress Controller with cert-manager and it works like a charm. Bonus info: running everything with skaffold and kustomize as well - so many great tools

    关于https - 运行 dockerised FastAPI 应用程序时的 CORS 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60680870/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com