微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cloud Run 是否从我的后端删除了 CORS 标头?

如何解决Cloud Run 是否从我的后端删除了 CORS 标头?

我使用 QuartQuart-CORSSQLAlchemy 在 Python 中开发了一个简单的后端。当我使用 Postman 在 localhost 上尝试不同的端点时,正确返回了 CORS 标头。我在 Google Cloud Run 上部署它后,似乎 Google 会删除后端返回的每个响应上的所有 CORS 标头,因此我的前端拒绝响应。

有没有人遇到过这个问题?关于如何解决它的任何想法?如果需要我方面的任何其他信息,请告诉我。

谢谢,

解决方法

我一直在研究它,到目前为止它似乎工作正常。以下代码结合了两种不同的解决方案:

  • 手动将 CORS 标头添加到 Quart 提供的 make_response 方法。
  • 使用附加库 Quart-CORS 中的方法。

单独使用这些解决方案中的任何一个可能就足够了,但不知何故,我设法解决了问题。

Python 代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Script used to launch the API.
"""

from __future__ import print_function
from quart import Quart,Blueprint,request,make_response,jsonify
from quart_cors import cors,route_cors
from http import HTTPStatus
import secrets

blueprint_v0_login_options = Blueprint('v0_login_options',__name__)
blueprint_v0_login_post = Blueprint('v0_login_post',__name__)


CORS_SETTINGS = {'allow_origin': '*'}


@blueprint_v0_login_options.route('/v0/login',methods=['OPTIONS'],provide_automatic_options=False)
@route_cors(**CORS_SETTINGS,provide_automatic_options=False)
async def v0_login_options():
    return await make_response(
        jsonify(None),HTTPStatus.ACCEPTED,{
            'Access-Control-Allow-Origin': '*','Access-Control-Allow-Headers': 'Origin,X-Requested-With,Content-Type,Accept','Access-Control-Allow-Methods': 'OPTIONS,POST'
        }
    )


@blueprint_v0_login_post.route('/v0/login',methods=['POST'],provide_automatic_options=False)
async def v0_login_post():

    json = await request.get_json()

    return await make_response(
        jsonify(json),Accept'
        }
    )


def main():

    # Start API server.
    quart_app = Quart(__name__)
    quart_app = cors(quart_app,**CORS_SETTINGS)
    quart_app.secret_key = secrets.token_urlsafe(16)

    # Register blueprints.
    quart_app.register_blueprint(blueprint_v0_login_options)
    quart_app.register_blueprint(blueprint_v0_login_post)

    quart_app.run(host='0.0.0.0',port=8081)


if __name__ == "__main__":
    main()

Dockerfile:

FROM python:3.8

COPY . /api
WORKDIR /api

# Prepare Python.
RUN apt-get update
RUN pip install --upgrade pip
ENV PYTHONUNBUFFERED=1

# Install module.
RUN python setup.py install

# Run.
CMD PYTHONPATH=. api

谢谢!!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?