AWS Api Gateway 仅在 OPTIONS 调用时不响应 CORS 标头

Posted

技术标签:

【中文标题】AWS Api Gateway 仅在 OPTIONS 调用时不响应 CORS 标头【英文标题】:AWS Api Gateway does not respond with CORS headers only on OPTIONS call 【发布时间】:2021-12-20 04:48:14 【问题描述】:

我尝试将 CORS 添加到我的 HTTP API,它确实适用于 GET、POST 等,但不适用于 OPTIONS 调用。可能是什么原因?

它是 AWS API Gateway 中全新的 HTTP API。我添加了一些 hello world lambda 函数作为路线,* 作为允许的来源。我认为 OPTIONS 调用的全部意义在于发送这些标头...

这里是邮递员请求 POST

这里有 OPTIONS

这是我的路线配置

这是我的 CORS 配置

【问题讨论】:

代理还是非代理? 无代理。路线只是/ANY OPTIONS 没有 CORS - 你是什么意思它适用于 GET & POST 但不适用于 OPTIONS? GET/POST 请求是否会返回 CORS 错误?实际问题是什么?请问可以加截图吗? 我添加了 Postman 截图。我希望 OPTIONS 请求的响应也有一个 access-control-allow-origin 标头,以便我的 API 在浏览器中工作 您是否在 API Gateway 中配置了 CORS 以允许使用 OPTIONS 方法?另外,您的 Lambda 是否有适当的返回响应? 【参考方案1】:

您应该能够轻松地在您的规范中为您的 API 添加 OPTIONS 支持:

options:
  summary: CORS support
  description: |
    Enable CORS by returning correct headers
  tags:
    - CORS
  responses:
    200:
      description: Default response for CORS method
      headers:
        Access-Control-Allow-Origin:
          schema:
            type: string
        Access-Control-Allow-Methods:
          schema:
            type: string
        Access-Control-Allow-Headers:
          schema:
            type: string
      content: 
  x-amazon-apigateway-integration:
    type: mock
    requestTemplates:
      application/json: |
        
          "statusCode" : 200
        
    responses:
      default:
        statusCode: '200'
        responseParameters:
          method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'"
          method.response.header.Access-Control-Allow-Methods: "'*'"
          method.response.header.Access-Control-Allow-Origin: "'*'"
        responseTemplates:
          application/json: |
            

这应该适用于非代理集成,并直接从 API 而不是从 lambda 返回正确的标头。您可能需要修改响应参数以满足您的需要。

对于代理集成,您需要在 lambda 函数中实现响应 (https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html)

【讨论】:

谢谢,但是如何正确导入呢?我尝试将它添加到我导出的 openapi 配置中。添加了路由,但没有集成。请求端点时,我得到 204 No Content.

以上是关于AWS Api Gateway 仅在 OPTIONS 调用时不响应 CORS 标头的主要内容,如果未能解决你的问题,请参考以下文章

如果在 Terraform 模块中创建了 aws_api_gateway_integration,如何在 aws_api_gateway_deployment 资源上填充depends_on?

从AWS API-Gateway中找出lambda名称

响应未定义 - aws-api-gateway-client

AWS API Gateway:用户匿名无权执行 API

AWS API Gateway 默认响应和触发 AWS Lambda

是否可以使用 AWS API 为 Lambda 函数设置 AWS API Gateway 端点?