我一直试图解决这个问题。
我有一个Lambda函数,当我向端点发出POST请求(使用AWS API GATEWAY配置)时,我试图运行。
一切运行正常,我的选项获得200分,我的帖子获得200分,然后返回我想要的数据。
然而,当我收回它时,它会认为"它失败了。我在这个项目中使用了JQuery,然后它回来了,因为"失败" CB。
查看控制台日志,问题很明显是以下错误:
XMLHttpRequest无法加载 https://xxxxxxxxx.execute-api.us-west-2.amazonaws.com/prod/createCustomer。 No' Access-Control-Allow-Origin'标题出现在请求的上 资源。起源' http://localhost:3000'因此是不允许的 访问。
标准的CORS问题。但我所做的一切似乎都无效。我在API网关上启用了CORS(之前OPTIONS会失败)。 'Access-Control-Allow-Origin':
设置为:'*'
,允许从任何来源进行访问。我当然部署了新的API。
我也尝试过不使用CORS,而是启用AWS代理服务器,然后像我这样做{ statusCode, headers, body }
,但是当我这样做时,我没有得到任何响应。
我完全不知道从哪里开始尝试解决这个问题。我甚至尝试了一种脏的jsonp方法。但还是同样的问题。 :(
我可以在我的请求中找到的唯一一点看起来不行的数据是:x-cache:Miss from cloudfront
这里是来自POST请求的完整响应标头:
content-length:2312
content-type:application/json
date:Thu, 23 Mar 2017 22:15:08 GMT
status:200
via:1.1 95a477af435073615179b256d8101334.cloudfront.net (CloudFront)
x-amz-cf-id:Hc6POYFO0HKB1xriSg2iH7O1po7ah926a4dQkgfSNBUZ460RoHRNuw==
x-amzn-requestid:2b5ed745-1016-11e7-b497-cb0a77cd1479
x-amzn-trace-id:Root=1-58d448ea-56717776eaa3f5389083e9ca
x-cache:Miss from cloudfront
可悲的是,很明显,访问控制标题不在那里......我认为这是我迫切想要解决的问题。但我不知道为什么因为我把它设置为' *'在此过程的启用CORS步骤期间。
我能够通过手动创建POST方法(而不是" ANY"),然后再次启用CORS,然后启用集成响应上的PROXY,并设置半接近解决方案我的回复:{ statusCode, headers, body }
这将作为一个成功的事件返回,并在我的ajax调用中运行正确的回调函数。但是,使用这种方法我没有从Lambda获得数据......尽管它在" body"中,我收到的只是一个空对象。
我并不喜欢使用CORS或手动添加标题,这很好,我不会更新这么多。我真的真的需要让它运作:(任何帮助将不胜感激。
答案 0 :(得分:1)
如果您从API获得x-cache:Miss from cloudfront
,那就没问题了,因为API Gateway不会在云端端启用边缘缓存。如果您希望 CORS 与Lambda代理集成一起使用,您可以返回状态代码和标题,例如,
{
"statusCode": 200,
"headers": { "Access-Control-Allow-Origin": "<domains you need>" }
}
然后,它就像来自客户端的空响应。
答案 1 :(得分:1)
我现在知道为什么,但我能够让它运转起来。使用以下步骤:
这绝对不是一个完美的答案。出于某种原因,打开代理修改了我的Lambda函数如何接收数据,所以我不得不对其进行字符串化而不会导致错误。我无法解释为什么会这样。
我使用的标题是:
"Access-Control-Allow-Methods": "DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT",
"Access-Control-Allow-Origin": "*"
更好的解决方案也是使用CORS实现此目的的一种方法。因为您不必在所有回复中手动插入标题。但我无法做到这一点。所以,如果有人知道这个帖子的更好的解决方案吧!