Google Cloud Run - как установить заголовок «Access-Control-Allow-Origin»? - PullRequest
2 голосов
/ 20 апреля 2019

Я настраиваю свое первое приложение в Google Cloud Run и теперь хочу подключить сервер к моему веб-сайту. Однако я столкнулся с проблемами CORS.

Я попытался исправить это в своем коде с помощью flask_cors. По моим запросам от localhost я вижу, что они включают заголовки 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

Я ожидал найти инструкции о том, как установить CORS в Cloud Run, но не смог найти. Я попытался сделать так, чтобы мой контейнер / API поддерживал CORS, но когда я помещаю его в Cloud Run, он "уходит".

Помощь будет высоко ценится!

1 Ответ

1 голос
/ 22 апреля 2019

Я редактировал пример Python Cloud Run, как вы описали

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)))

Я могу получить заголовок access-control-allow-origin: * как локально, так и удаленно в Cloud Run.

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: *

Облачный прогон:

$ 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 Buckets, прочитайте Размещение статического веб-сайта в GCS .

Если вы просто перенаправляете запрос из Cloud Run на GCS, да, это может бытьнаследование заголовков CORS от ответа GCS.Я рекомендую вам проверить эти заголовки.

...