提问者:小点点

如何在Azure函数API(Python)中处理CORS飞行前准备?


我试图在我部署的用于检索JSON数据的Azure函数上创建一个POST。我得到一个CORS错误。

从源站获取“{API URL}”的访问权限http://localhost:3000'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在'access control Allow Origin'标头。如果不透明响应满足您的需要,请将请求的模式设置为“no cors”,以获取禁用cors的资源。

我的前端使用javascript发送POST请求:

    const data = { name: "jennifer" };

    const response = fetch(url, {
        method: 'POST',
        body: JSON.stringify(data),
        headers: {
            'Content-Type': 'application/json',
            'Access-Control-Allow-Origin': "http://localhost:3000",
            'Origin': 'http://localhost:3000'
        }
    })

我的后端通过以下方式处理CORS飞行前:

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    headers = {
            "Access-Control-Allow-Origin" : "http://localhost:3000",
            "Access-Control-Allow-Credentials" : "true",
            "Access-Control-Allow-Methods" : "GET, POST, OPTIONS",
            "Access-Control-Allow-Headers" : "Origin, Content-Type, Accept"}

    #handle CORS preflight
    if req.method == "OPTIONS":
        return func.HttpResponse(headers=headers)

我是不是把起飞前的事处理错了?


共1个答案

匿名用户

我通过从消费计划迁移到应用服务计划来“解决”这个问题。这使我能够用它们奇特的UI配置CORS。

@AnthonyChu建议

如果要继续使用Azure Functions的使用计划,可以在函数应用前面使用Azure API管理使用层来添加CORS策略。"