我正在Google Cloud Run上设置我的第一个应用程序,现在想将服务器连接到我的网站。但是我遇到了CORS问题。
我尝试使用flask_cors在我的代码中修复它。在来自本地主机的请求中,我可以看到它们确实包含CORS标头,但不是来自Cloud Run。
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app, resources={r"/*": {"origins": "*"}})
我还尝试过在幕后使用的存储桶上设置CORS。使用了以下代码
gsutil cors set cors-json-file.json gs://
链接:https://cloud.google.com/storage/docs/configuring-cors
我希望能找到有关如何在某个地方的Cloud Run上设置CORS的说明,但至今找不到。我尝试使容器/ API支持CORS,但是当我将其推到Cloud Run时,它“消失了”。
我们将不胜感激!
答案 0 :(得分:0)
我已经按照您的描述编辑了Cloud Run python示例
import os
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app, resources={r"/*": {"origins": "*"}})
@app.route('/')
def hello_world():
return 'Hello, world!\n'
if __name__ == "__main__":
app.run(debug=True,host='0.0.0.0',port=int(os.environ.get('PORT', 8080)))
我能够在Cloud Run上本地和远程获取access-control-allow-origin: *
标头。
docker run --rm -i -e PORT=8080 -p 8080:8080 gcr.io/ahmetb-samples-playground/run/cors-test
$ curl -v http://localhost:8080
< HTTP/1.1 200 OK
< Server: gunicorn/19.9.0
< Date: Mon, 22 Apr 2019 18:23:06 GMT
< Connection: keep-alive
< Content-Type: text/html; charset=utf-8
< Content-Length: 14
< Access-Control-Allow-Origin: *
Cloud Run:
$ curl -v https://cors-test-dpyb4duzqq-uc.a.run.app
< HTTP/2 200
< content-type: text/html; charset=utf-8
< access-control-allow-origin: *
< x-cloud-trace-context: 8503b029795fdc57bbc4267961806847;o=1
< date: Mon, 22 Apr 2019 18:23:30 GMT
< server: Google Frontend
< content-length: 14
两个响应都带有应用程序中设置的access-control-allow-origin
头。 Cloud Run不会删除此标头。
我不确定GCS CORS权限与这个问题如何/为什么相关。如果您想直接从GCS桶中提供网站服务,请阅读Hosting a static Website on GCS。
如果您只是将请求从Cloud Run代理到GCS,是的,它可能是继承自GCS响应的CORS标头。我建议您检查那些标题。