HTTPApi + 无服务器框架 + API 网关 CORS 不起作用

时间:2021-02-01 21:48:42

标签: aws-lambda aws-api-gateway serverless-framework amazon-api-gateway aws-http-api

我有一个使用无服务器框架创建的 HTTPApi API 网关。但是对于某些路线,CORS 不起作用。

provider:
  name: aws
  runtime: nodejs12.x
  stage: dev
  region: us-west-2
  timeout: 29
  httpApi:
    cors:
      allowedOrigins:
        - '*'
      allowedMethods:
        - GET
        - OPTIONS
        - POST
        - PUT
        - DELETE
      allowedHeaders:
        - Content-Type
        - X-Amz-Date
        - Authorization
        - X-Api-Key
        - X-Amz-Security-Token
        - X-Amz-User-Agent
        - X-Transaction-Key
        - Access-Control-Allow-Origin

我尝试在提供程序上设置 cors:true 选项,但仍然无效。 这是在所有路由上返回的响应,无论是 4xx 还是 2xx 代码。

return {
    statusCode: StatusCode,
    headers: {
      "Content-Type": "application/json",
      "Access-Control-Allow-Origin": "*",
      "Access-Control-Allow-Credentials" : true,
      "Access-Control-Allow-Headers" : "*",
      "Access-Control-Allow-Methods": "OPTIONS,POST,GET,PUT,DELETE"
    },
    body: JSON.stringify(Res, null, 2),
  };

如果我检查控制台 I can see that the options are indeed applied 然而,some routes actually work some others don't,那些不起作用的有 X-Transaction-Key 标头,而 OPTIONS 不返回 access-control-allow-headers: authorization,content-type,x-amz-date,x-amz-security-token,x-amz-user-agent,x-api-key,x-transaction-key 标头

我错过了什么? 提前致谢

2 个答案:

答案 0 :(得分:1)

我也遇到过类似的问题。拉我的头发3天后。我发现了我的问题。一切都很好,除了在我的客户端中,很少有错误的 URL(拼写错误)指向我的服务器 API。这就是为什么很少有 API 可以正常工作,也很少有 API 无法正常工作。

修复到正确的 URL 后一切正常。 这是我的学习,希望有一天它会帮助其他人:

  1. 检查你是 serverless.yml 文件的 cors 部分,这是一个例子

     cors:
        origin: '*'
        headers:
          - Content-Type
          - X-Amz-Date
          - Authorization
          - X-Api-Key
          - X-Amz-Security-Token
        allowCredentials: false
    
  2. 检查 Lamdba 是否有正确的响应标头,因为问题包含

用于故障排除的其他工具:

希望能帮到你,谢谢!

快乐编码

答案 1 :(得分:0)

您是否尝试像在 Serverless with cors 中那样修复函数事件中的 'cors: true' 值?