mcl*_*lee 7 cors flask google-cloud-platform flask-cors google-cloud-run
我有一个 React 微服务(通过 nginx)部署到谷歌云运行上,其后端环境变量设置为另一个运行为后端服务的 Gunicorn 的谷歌云运行实例。
我的 Flask 应用程序是按照我能找到的有关允许 CORS 的所有内容进行设置的:
app = Flask(__name__)
app.config.from_object(config)
CORS(app, resources={r"/*": {"origins": "*"}})
app.config['CORS_HEADERS'] = 'Content-Type'
return app
# Different file, a blueprint's urls:
@blueprint.route('/resources')
@cross_origin()
def get_resources():
...
Run Code Online (Sandbox Code Playgroud)
但我仍然感到害怕Access to XMLHttpRequest at 'https://backend/resources/' from origin 'https://frontend' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
有谁对此有任何见解/知道在解决这个问题时还可以从哪里寻找?我想用我的微服务设置 GKE,但最初选择了阻力最小的路径,在云中建立 POC。我让后端与我的 Cloud SQL 实例对话,我已经很接近了!
谢谢
您设置的内容超出了您的需要。除非您需要为不同的端点提供不同的 CORS 访问权限,否则最简单的示例只需要调用CORS(app):
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
@app.route("/resources")
def get_resources():
return "Hello, cross-origin-world!"
if __name__ == "__main__":
app.run('0.0.0.0', 8080, debug=True)
Run Code Online (Sandbox Code Playgroud)
你会看到标题存在:
$ curl -I localhost:8080/resources
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 26
Access-Control-Allow-Origin: *
Server: Werkzeug/1.0.1 Python/3.7.4
Date: Tue, 21 Apr 2020 17:19:25 GMT
Run Code Online (Sandbox Code Playgroud)
一切都是自作自受。
正如达斯汀·英格拉姆(Dustin Ingram)提到的,如果为 Flask 启用 CORS,它就会起作用。我仍然不知道为什么我会遇到 CORS 问题,我从一开始就为我的 Flask 应用程序启用了 CORS。
在我清理所有内容并重新部署后,CORS 问题就消失了。然而,我最终还是得到了 404、405 和 308。
有几个问题,我所有的缺点,综合起来给我带来了这些问题。在create-react-app(我认为webpack正在这样做)中,传递到docker运行时的环境变量没有得到尊重,因此我在Cloud Run中设置的环境变量根本不起作用。目前我选择了 process.env.VARIABLE || “硬编码 URL”路线。一旦我弄清楚了这一点,我还记得 Flask URL 中的尾部斜杠是不好的......这给了我 308,永久重定向。一旦弄清楚这一点,我意识到在手动部署期间,我没有将云构建映像切换到最新版本。叹。一旦我开始部署最新的映像,一切就开始工作了。耶!
感谢达斯汀和加布花时间研究我的愚蠢行为。
| 归档时间: |
|
| 查看次数: |
14454 次 |
| 最近记录: |