我目前有一个通过 API Gateway 和 Lambda 工作的 POST 函数,该函数可以从带有 CORS 的 Angular 客户端访问。虽然我不知道你的配置是什么,但我可以分享我所有的相关设置,希望你能找到你错过的东西。目前启用 CORS 是一件很痛苦的事情(希望亚马逊正在努力修复),需要在很多文档相当差的领域中执行很多小步骤。
我的资源有 2 种方法(OPTIONS 和 POST),我将分享每种方法的相关设置:
POST:
方法请求:没什么特别的。对于我的端点,我在请求路径下有一个用于我的路由参数之一的选项。我没有使用查询字符串,因此 URL 查询字符串为空。HTTP 请求标头也是空的。
集成请求:
集成类型:Lambda 映射模板:我有一个(应用程序/json)带有一个模板,用于将适当的值从请求正文和路由参数传递到我的 lambda 函数。
方法响应:
展开 200 状态代码字段。为“Access-Control-Allow-Origin”添加一个标题,然后单击复选标记按钮以保存它。您可能必须为您可能拥有的任何其他状态代码执行此操作。
集成响应:
展开 200 响应状态字段。在 Header Mappings 下,修改映射值以包含“*”。单引号是必需的。您可能必须为您可能拥有的任何其他集成响应执行此操作。
选项:
方法请求:
没什么特别的,就像 POST 方法一样。
集成请求:
我将其设置为模拟集成。根据亚马逊的说法,这没关系,所以我只是将它设置为模拟,因为我们真正需要做的就是使用适当的标头响应 200。没有映射模板。
方法响应:
展开 200 状态代码字段。添加以下 3 个响应标头并使用复选框保存它们:Access-Control-Allow-Headers、Access-Control-Allow-Methods、Access-Control-Allow-Origin。不存在其他状态代码。
集成响应:
展开 200 响应状态字段。正则表达式为空(设置为默认值),此方法只有 200 响应。展开标头映射并将标头设置为以下映射值:
Access-Control-Allow-Headers: 'Content-Type,X-Amz-Date,Authorization,X-Requested-With'
Access-Control-Allow-Methods: 'GET,POST,OPTIONS'
Access-Control-Allow-Origin: '*'
没有映射模板。
然后部署您的 API。希望它现在允许 CORS 请求。我遇到了与您完全相同的问题,并且我相当确定问题是缺少 Access-Control-Allow-Headers 中的 X-Requested-With 值。