我无法在AWS Api Gateway的任何资源上启用CORS。
我使用了"启用Cors" Web UI上显示的按钮:
但是试图在开发或生产中使用产量:
我使用的是jQuery 2.2.4和方法$.post
。
出了什么问题?
更新:测试升级:
成功更新:
AWS文档可能非常庞大。我没有意识到你必须导出一个客户端生成的SDK ,它有一个全局变量,它根据你提供的资源生成方法。因此,当我使用这个代码时,我最终可以返回一个成功的结果:
const apigClient = apigClientFactory.newClient();
apigClient.purchaseTokenPost({}, card, {})
.then(function(result){
console.log(result);
}).catch(function(result){
console.log(result);
});
答案 0 :(得分:0)
CORS似乎已为您的方法正确设置。我用这个工具测试过: http://client.cors-api.appspot.com/client(输入您的调用URL,POST下拉列表,您可以确认触发成功“onload”回调)
如果jQuery存在问题,您是否可以尝试使用纯JavaScript来缩小范围?请参阅:A CORS POST request works from plain javascript, but why not with jQuery?
编辑: 在http://enable-cors.org/server_awsapigateway.html上找到了这个。看起来API Gateway中的One-Click CORS按钮与jQuery不兼容:
Amazon API Gateway通过API网关控制台中的简单按钮添加对CORS启用的支持。不幸的是,该按钮具有部分行为,因此仅为200回答(因此不是其他HTTP状态代码)正确设置CORS并忽略JQuery标头支持。到目前为止考虑的最佳解决方案是关于使用CORS按钮并手动设置配置。这可以通过几个步骤来实现:...
(最终)编辑:当集成返回错误响应时,这是API网关未应用标头映射的错误。这已成为一个已知问题很长一段时间了:https://forums.aws.amazon.com/thread.jspa?threadID=220324&tstart=0
答案 1 :(得分:0)
我发现即使对于没有安全保障的人来说也是如此。 api调用,即你没有使用API密钥保护的(就像我测试过的东西一样),一旦我启用了cors,它只会在我创建API密钥并将其与请求一起发送时才能工作 - 简单要做,可能想尝试一下。
ADDL INFO:
以下是我在端点上启用CORS后为我工作的示例jquery:
function loadData() {
$.ajax({
type: "GET",
cache: false,
url: "https://k4t999edod.execute-api.us-east-1.amazonaws.com/prod/myapicall",
crossDomain: true,
dataType: "json",
headers: { 'x-api-key': 'xoeNNQ9475PCAgLtNP18cTv6YTWWB2JFfOe', 'X-Amz-Date': '1/1/2000', 'X-Amz-Security-Token': 'xoeNNQ9475PCAgLtNP18cTv6YTWWB2JFfOe' },
success: function (response) {
//do something here.
}
});
}
注意我在两个地方包含了API密钥(我对实际密钥进行了加扰)