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