【问题标题】:Keep getting 502 on a Lambda request with API Gateway. No 'Access-Control-Allow-Origin' header is present on the requested resource使用 API Gateway 在 Lambda 请求中不断收到 502。请求的资源上不存在“Access-Control-Allow-Origin”标头
【发布时间】:2020-07-20 08:10:32
【问题描述】:

我用无服务器构建了一个 API 网关,而我用 allowCredentials: true 创建的第一条路由不起作用。

clients-confirmation:
    handler: clients.onConfirmation
    events:
      - http:
          path: clients/on-confirmation
          method: post
          cors:
            origin: 'https://840b1a6d.ngrok.io' # <-- Specify allowed origin
            headers:
              - Content-Type
              - X-Amz-Date
              - Authorization
              - X-Api-Key
              - X-Amz-Security-Token
              - X-Amz-User-Agent
              - Access-Control-Allow-Origin
              - Access-Control-Allow-Credentials
              - Access-Control-Allow-Methods
              - Access-Control-Allow-Headers
            allowCredentials: true
            cacheControl: 'max-age=600, s-maxage=600, proxy-revalidate'
          authorizer: aws_iam

用户已登录,我使用 AWS-Amplify Auth.post 发布到路由。

我尝试将我的 localhost 放在 ngrok 上以更好地感受真实环境,但它不起作用。

我的 ResponseBuilder 提供了我认为正确的标题。

export default class ResponseBuilder {
  static create(data, withCredentials = false) {
    return {
      statusCode: 200,
      headers: {
        'Access-Control-Allow-Origin': 'https://840b1a6d.ngrok.io',
        'Access-Control-Allow-Credentials': withCredentials, // true
        'Access-Control-Allow-Headers': 'access-control-allow-origin, Access-Control-Allow-Headers, Access-Control-Allow-Origin, Origin,Accept, Access-Control-Allow-Credentials'
      },
      body: JSON.stringify(data),
      'isBase64Encoded': false,
    };
  }
}

我在每个请求上都使用它。我尝试输入 ngrok 来源和通配符,但它一直告诉我同样的错误。

关于 lambda 的响应或我应该添加到无服务器文件中的设置是否有什么我不知道的地方?

非常感谢您的帮助!

【问题讨论】:

  • 如果它返回 502 可能是 Lambda 失败了?检查您的日志。在这种情况下,ResponseBuilder 将没有机会添加 CORS 标头。

标签: javascript node.js aws-lambda serverless-framework


【解决方案1】:

allowCredentials: true 不能与 'Access-Control-Allow-Origin': '*' 一起使用。

您必须明确指定来源:

'Access-Control-Allow-Origin': 'https://840b1a6d.ngrok.io'

还有withCredentials'Access-Control-Allow-Credentials': withCredentials
应该是true

【讨论】:

  • 对不起,我忘了告诉我我试过'Access-Control-Allow-Origin': 'https://840b1a6d.ngrok.io'。没用你如何在'Access-Control-Allow-Credentials'中添加“withCredentials:withCredentials应该是真的”?
猜你喜欢
  • 2017-04-28
  • 2019-06-10
  • 2022-06-15
  • 2021-06-29
  • 2022-01-20
  • 2020-11-08
  • 2013-11-29
  • 2014-07-28
相关资源
最近更新 更多