修复:飞行前响应错误:AWS API网关Express Lambda的访问控制允许标头不允许访问控制允许原点

修复:飞行前响应错误:AWS API网关Express Lambda的访问控制允许标头不允许访问控制允许原点,express,aws-lambda,aws-api-gateway,Express,Aws Lambda,Aws Api Gateway,我已经使用Express(node.js)准备了一个Lambda函数,并使用IAM启用了授权 API正在邮递员中工作,如下链接: 因为我对CORS策略和API概念相当陌生。我正在尝试使用Ajax调用访问示例 到目前为止,我已经根据文档准备了授权标题,并且没有多少参考资料 吉特回购链接: 用于生成签名的参考链接: 我已经从AWS API网关为我的API启用了CORS。 PS:API是使用无服务器框架部署的 第1步:当我不包含任何标题时,我面临的错误是: 步骤2:稍后添加标题时: $.aj

我已经使用Express(node.js)准备了一个Lambda函数,并使用IAM启用了授权

API正在邮递员中工作,如下链接:

因为我对CORS策略和API概念相当陌生。我正在尝试使用Ajax调用访问示例

到目前为止,我已经根据文档准备了授权标题,并且没有多少参考资料

吉特回购链接

用于生成签名的参考链接

我已经从AWS API网关为我的API启用了CORS。

PS:API是使用无服务器框架部署的

第1步:当我不包含任何标题时,我面临的错误是:

步骤2:稍后添加标题时:

$.ajax(Signer(credentials, {
  url: <AWS API URL>,
  type: 'GET',
  dataType: 'json',
  async: true,
  crossDomain: true,
  contentType: 'application/json',
  headers: {
    "Access-Control-Allow-Origin" : "*"
  },
  success: function(data) {
    console.log(data);
  }
}));
$.ajax(签名者(凭证、{
网址:

在我以前处理此错误的经验中,我们只需要为解决此问题的API启用CORS。但在这种情况下并非如此。下面是API资源的结构

我已经被困在这个问题上好几天了,还遇到了一些CORS政策参考链接。

解决方案: 参考:


提前感谢您的帮助。

这里有一些东西要看

  • 确保Lambda函数中的所有resposne都返回cors头。我在您的示例中看到了这种情况
  • 确保函数本身没有返回错误。如果使用无服务器框架仪表板或CloudWatch,则可以在该仪表板中看到这一点。如果是这样,则需要找到修复程序或捕获错误,并确保响应还包括所需的CORS头
  • 否则,例如,如果授权返回403,则需要在serverless.yml的参考资料部分中配置API网关4XX响应的响应,因为默认情况下API网关不会将cors应用于授权者响应。类似于:

  • 你在使用Chrome吗?如果是,请看这个-是的。我在使用Chrome。但我在Firefox中检查了相同的问题。我得到了类似的问题。“跨源请求被阻止:同一源策略不允许读取位于的远程资源。(原因:CORS标头“访问控制允许源”丢失)。”@JosephLane感谢Firefox的建议。我解决了问题。这是授权字符串中的问题。API正在工作。因为我正在使用邮递员检查其响应。在您的浏览器中使用它时,请检查响应状态CodeThank@Gareth。我发现了问题。这是授权密钥生成中的问题,原因是:我收到403状态错误。而且该错误仅在Firefox中可见,在Chrome中不可见。我将在repo中更新更改,并在我的回答中共享相同的更改。
    resources:
      Resources:
        GatewayResponseDefault4XX:
          Type: 'AWS::ApiGateway::GatewayResponse'
          Properties:
            ResponseParameters:
              gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
              gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
            ResponseType: DEFAULT_4XX
            RestApiId:
              Ref: 'ApiGatewayRestApi'