繁体   English   中英

从Django调用AWS API Gateway的CORS错误

[英]CORS error calling AWS API Gateway from Django

我使用AWS Lambda和API网关构建了一个简单的RESTful终端节点。 API网关已启用CORS,并且客户端正在按此处所述发送适当的标头

客户端应用程序是在Django中构建的,并使用JQuery:

 $.ajax({
    type: 'GET',
    url: baseUrl,
    crossDomain: true,
    contentType: 'application/json'
})

同样,Lambda函数本身返回以下有效负载:

return {
    'statusCode': 200,
    'headers': {
        'Content-Type': 'application/json',
        "Access-Control-Allow-Origin": "*",
        "Access-Control-Allow-Credentials": "true"
    },
    'body': json.dumps(json_response)
}

Chrome仍会引发CORS错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource

我想念什么吗?

我无法根据评论回答您的问题,但您可能缺少“ Access-Control-Allow-Headers”标头。

{
    "headers" : {
        'Access-Control-Allow-Origin' : '*',
        'Access-Control-Allow-Headers':'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
        'Access-Control-Allow-Credentials' : True,
        'Content-Type': 'application/json'                        
    },
    "isBase64Encoded": False,
    "statusCode": 200,
    "body"  : json.dumps(json_response),
}

为此,您必须在API Gateway端点上使用LAMBDA_PROXY集成。

这里找到答案

在“网关响应”下,编辑默认的4xx设置,并添加响应头'Access-Control-Allow-Origin':'*'

注意:一旦我从API得到了{ "message" : "forbidden" }响应,就需要在JQuery中的API调用中添加标头:

 $.ajax({
    type: 'GET',
    url: baseUrl,
    crossDomain: true,
    headers: { "x-api-key": apiKey },
    contentType: 'application/json'
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM