【问题标题】:HTTPApi + Serverless Framework + API Gateway CORS not workingHTTPApi + 无服务器框架 + API 网关 CORS 不起作用
【发布时间】:2021-05-06 02:21:22
【问题描述】:

我有一个使用无服务器框架创建的 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 标头

我错过了什么? 提前致谢

【问题讨论】:

  • 转到 AWS 中的 API 网关并在所有资源上启用 CORS

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


【解决方案1】:

我也遇到过类似的问题。拉我的头发3天后。我发现了我的问题。一切都很好,除了 在我的客户端中,很少有错误的 URL(拼写错误)指向我的服务器 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 以获取正确的响应标头,因为问题包含

其他故障排除工具:

希望对您有所帮助,谢谢!

快乐编码

【讨论】:

  • 是的,没错。我后来发现了这个问题并以同样的方式解决了它,但没有更新我的问题。我认为只要将非标准或自定义标头添加到请求中就会发生这种情况。我的问题是我有一个额外的标题
  • 对我来说,问题是 url 中有一个额外的 /!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 2021-04-30
    • 2021-02-10
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 2018-02-10
    • 2020-07-10
    • 2020-11-08
    相关资源
    最近更新 更多