AWS API Gateway - 尽管遵循以下教程,但仍出现 CORS 错误

2024-02-14

我有一个 sam 文件试图构建 lambda 函数的 API 网关。我正在关注最新的用于配置 cors 的 AWS 文档 https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-api-corsconfiguration.html。该文档引用如下:

正如您可能已经猜到的那样,这对我不起作用。如果我使用“http://localhost:3000”或其变体作为“AllowOrigin”属性,则会收到以下错误:

CORS 策略已阻止从源“http://localhost:3000”访问“xxx”处的 XMLHttpRequest:请求的资源上不存在“Access-Control-Allow-Origin”标头。

检查 API 网关,该属性确实存在。尽管它似乎只存在于选项中,而不存在于“ANY”部分。

如果我将其更改为AllowOrigin: "'*'",则会收到以下错误:

从源“http://localhost:3000”访问“xxxx”处的 XMLHttpRequest 已被 CORS 策略阻止:“Access-Control-Allow-Origin”标头包含多个值“*、*”,但只允许一个。

除此之外,还创建了一个单独的“Stage”阶段,我不明白该阶段,并且我不确定代理是否需要存在或在 SAM 文件中的位置创建。

这是我的 sam 的 yaml 文件。

AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: Storygraf backend API

Globals:
  Function:
    Timeout: 3

Resources:
  ExpressApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: dev
      Cors:
        AllowOrigin: "'*'"
        AllowMethods: "'POST, GET, PUT, DELETE'"
        AllowHeaders: "'X-Forwarded-For, Content-Type'"

  ExpressLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./
      Handler: lambda.handler
      MemorySize: 512
      Runtime: nodejs14.x
      Timeout: 30
      Events:
        ProxyApiRoot:
          Type: Api
          Properties:
            RestApiId: !Ref ExpressApi
            Path: /
            Method: ANY
        ProxyApiGreedy:
          Type: Api
          Properties:
            RestApiId: !Ref ExpressApi
            Path: /{proxy+}
            Method: ANY

Update

看起来测试在通过代理时有效,但在使用非代理 GET 命令时没有任何可用。

Update

我发现打包过程正在更改报价 https://stackoverflow.com/questions/73490786/sam-package-is-adding-quotes-to-my-yaml-file,但这似乎不是问题。


从你的日志中你access-control-allow-origin从您返回的标头GET测试返回一个数组['*','*']。它不应该是一个数组,而应该是'*'.

Edit enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS API Gateway - 尽管遵循以下教程,但仍出现 CORS 错误 的相关文章

随机推荐