对AWS API Gateway访问的POST请求

时间:2017-01-25 15:57:53

标签: ajax amazon-web-services aws-lambda aws-api-gateway

我有一个通过AWS API Gateway触发的AWS Lambda函数。当我在Lambda上测试我的功能时,它正在工作。当我通过ajax向API URL发送POST请求时,我收到502错误的网关错误。

XMLHttpRequest cannot load https://xxxxxxxx.execute-api.us-east-1.amazonaws.com/prod/myLambdaFunction. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'mywebsite.com' is therefore not allowed access. The response had HTTP status code 502.

显然这是一个CORS问题,所以我想我可以更改我的AWS API网关URL中的CORS设置,但我仍然收到错误。

我需要在AWS方面或我自己更改哪些内容才能发布到网址?

2 个答案:

答案 0 :(得分:2)

不幸的是,即使您已通过控制台添加了CORS支持,也存在许多4xx和5xx类错误的已知问题,其中CORS标头将不会被发送。

如评论中所述,CORS错误是您的API返回502这一事实的副作用。如果您使用LAMBDA_PROXY集成类型并从Lambda函数返回无效JSON,则通常会发生这种情况。

请尝试使用控制台中的test invoke functionality或API中的enable logging进一步调试。

答案 1 :(得分:0)

我通过自己输出CORS头解决了同样的问题。 见下文 - 我希望这会有所帮助。 Teebo

Amazon docs

function respond(context, responseData) {
var response = {
  statusCode: 200,
  body: JSON.stringify(responseData),
  headers: {
    "Content-Type": "application/json; charset=utf-8",
    "Access-Control-Allow-Origin": "*"
  }
};
context.succeed(response); }