【问题标题】:How to Enable CORS for an AWS API Gateway Resource如何为 AWS API Gateway 资源启用 CORS
【发布时间】:2018-01-31 18:11:01
【问题描述】:

我使用 AWS API Gateway 和 AWS Lambda 创建了 REST API,当我配置 CORS 时遇到了这样的问题 - 我能够为 OPTIONS 方法配置 CORS 响应标头,但没有为 GET 方法配置。

我是按照Amazon documentation 做的,但是当我调用 GET 方法时,我没有在回复。因此我在客户端遇到错误:

无法加载#my_test_rest#:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin #my_test_rest_url# 因此不允许访问。

作为临时修复,我在 Lambda 函数的代码中硬编码了所需的标头,但它看起来不是正确的解决方案,我想了解它为什么不适合我。任何想法我做错了什么?

【问题讨论】:

  • 您是否将 Lambda 代理集成用于您的 GET 方法?
  • @KhalidT。是的,我用那个

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


【解决方案1】:

由于您将 Lambda 代理集成用于您的方法,因此您需要:

(1) 提供 Access-Control-Allow-Origin 标头作为 Lambda 响应的一部分。例如:

callback(null, {
    statusCode: 200,
    headers: {"Content-Type": "application/json", "Access-Control-Allow-Origin": "*"},
    body: JSON.stringify({message: "Success"})
});

(2) 并在 Method Response 配置中添加 Access-Control-Allow-Origin 作为 200 响应标头。

【讨论】:

  • 这正是我已经做过的。但我认为在函数代码中硬编码标题并不是一个好主意,因为它看起来违反了单一责任原则。我正在寻找如何仅使用 API 网关配置来做到这一点
  • 我完全同意,但是由于代理集成禁用了集成响应,您必须依靠后端返回 Access-Control-Allow-Origin 标头。
  • 对于那些遵循上述但仍有问题的人。当我为资源方法设置API Key Required = true 后,我的 API 网关资源仍然会失败。经过几个小时挠头并收到 CORS 403 错误后,我发现如果您需要 api 密钥和资源方法,那么您必须在 AWS 中创建一个使用计划以配合 api 密钥和资源。设置完成后,我可能需要方法上的 api 密钥,并且不再收到错误。
猜你喜欢
  • 2018-02-21
  • 2021-03-08
  • 2021-09-15
  • 2020-08-17
  • 2020-02-20
  • 2019-07-09
  • 2019-12-30
  • 2019-03-08
  • 2019-06-09
相关资源
最近更新 更多