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

问题描述 投票:0回答:4

我有一个使用无服务器框架创建的 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-lambda serverless-framework aws-api-gateway aws-http-api
4个回答
4
投票

我也遇到过类似的问题。拉我头发三天后。我找到了我的问题。一切都很好,除了,在我的客户端中,很少有错误的 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 是否有正确的响应标头,因为问题包含

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

希望对你有帮助,谢谢!

快乐编码


0
投票

我也遇到了同样的问题。请检查您是否发送了所有正确的Headers。如果您发送任何附加标头并且不微调 cors 配置,您将收到 CORS 错误

对我来说,我的 Authorization 标题有一个拼写错误。我花了 3 天多的时间才弄清楚哈哈!

请查看此链接以获取详细文档以及如何针对 httpAPi 微调 cors https://www.serverless.com/framework/docs/providers/aws/events/http-api


0
投票

我在这个问题上绞尽脑汁,只能通过执行以下操作来部署 AWS 和使用 CORS 的本地环境:

  • 使用 Serverless 的 Flask API(+ DynamoDB,如果您愿意的话;这就是我所做的)模板重新开始。这几乎是开箱即用的;如果您将 SLS 文档中的代码片段包含到 serverless.yml 中:
provider: 
  httpApi: 
    cors: true
  • CORS 在

    sls deploy
    之后在 APIGW 端点上工作,但没有在
    sls wsgi serve
    本地运行。所以我通过
    flask run
    在本地运行 Flask,仅使用装饰器添加
    flask_cors
    @cross_origin()
    。也就是说,我没有跑
    flask_cors.CORS(app)

  • 以这种方式运行,预检 (OPTIONS) 和 POST 调用都工作正常,并且启用了 CORS,无论是在本地还是在由 severless 部署的 API Gateway/Lambda/SAM 堆栈中。


-2
投票

您是否尝试过修复函数事件中的“cors: true”值,如使用 cors 的无服务器

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.