【问题标题】:Enabling cors on a method in the template.yaml with the implicit API使用隐式 API 在 template.yaml 中的方法上启用 cors
【发布时间】:2021-01-11 04:06:04
【问题描述】:

每当我部署时,我都会尝试为 Stack RestAPI 及其所有方法启用 Cors。我已经设法通过创建一个空模型手动完成此操作,然后将其与 statusCode 200 一起设置为响应。

问题是,我不希望它被重置并且必须手动更改它。到目前为止,我发现的最接近的是有人提出了这样的建议:

  OptionsMethod:
    Type: AWS::ApiGateway::Method
    Properties:
      AuthorizationType: NONE
      RestApiId: !Ref MyApi
      ResourceId: !GetAtt MyApi.RootResourceId
      ...

我尝试通过将MyApi 替换为ServerlessRestApi(这似乎是隐含的Rest Api)来将其修改为我能想到的所有风格。我不知道如何使它工作,除非创建另一个 API 而不是隐式 API。

简而言之,我希望在部署我/一个新的 lambda 函数时默认启用 cors。

【问题讨论】:

  • 设置一个可以处理您的 CROS 飞行前请求的选项方法,然后将您的 CORS 标头合并到集成/请求方法中。

标签: aws-lambda amazon-cloudformation aws-sam


【解决方案1】:

您可以在 yaml 中全局设置 CORS:

Globals:
  Api:
    Cors:
      AllowMethods: "'OPTIONS,POST,GET'"
      AllowHeaders: "'*'"
      AllowOrigin: "'*'"

【讨论】:

    【解决方案2】:

    您必须在 Lambda 函数响应中包含 Cors 标头(如 here 所述),更具体地说:

    {
        body: {...},
        headers: {
            "Access-Control-Allow-Headers" : "X-Requested-With,Content-Type",
            "Access-Control-Allow-Origin": "https://www.example.com",
            "Access-Control-Allow-Methods": "OPTIONS,POST,GET"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-04
      • 2021-08-18
      • 2015-02-19
      • 2014-10-31
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 2018-12-29
      相关资源
      最近更新 更多