我使用AWS Lambda和API网关构建了一个简单的RESTful终端节点。 API网关已启用CORS,并且客户端正在按照here
的说明发送适当的标头客户端应用程序是在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
我想念什么吗?
答案 0 :(得分:0)
我无法根据评论回答您的问题,但您可能缺少“ 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集成。
答案 1 :(得分:0)
找到了答案here
在“网关响应”下,编辑默认的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'
})