aws-lambda - HTTPApi + 无服务器框架 + API 网关 CORS 不工作

标签 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 header 并且 OPTIONS 不返回 access-control-allow-headers: authorization,内容类型,x-amz-date,x-amz-security-token,x-amz-user-agent,x-api-key,x-transaction-key header

我错过了什么? 提前致谢

最佳答案

我遇到过类似的问题。拉头发 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 是否包含正确的响应 header ,因为问题包含

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

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

快乐编码

关于aws-lambda - HTTPApi + 无服务器框架 + API 网关 CORS 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66000642/

相关文章:

amazon-web-services - AWS Api Gateway 本地测试/开发

swift - AWS APIGateway 和 Lambda - 如何在 iOS 应用程序终止之前立即调用函数?

multipartform-data - 使用无服务器处理多部分/表单数据?

spring - aws lambda 函数 chromedriver 不可执行

amazon-web-services - AWS API Gateway HTTP 请求拦截器

json - 是否可以将所有阶段变量添加到嵌套 JSON 结构中的正文映射模板中?

aws-cloudformation - 如何从 Lambda 函数连接到 serverless.yml 中 "Resources"下定义的 RDS?

java - 亚马逊网络服务 - API 网关

java - 如何访问 AWS Lambda 函数中的路径变量 (GET)

javascript - 无服务器 - 如何动态添加从 javascript 文件生成的资源并将其与其他资源合并?