如何启用CORS?

时间:2016-06-23 06:20:48

标签: javascript jquery cors aws-api-gateway

我无法在AWS Api Gateway的任何资源上启用CORS。

我使用了"启用Cors" Web UI上显示的按钮:

enter image description here

但是试图在开发或生产中使用产量:

enter image description here

我使用的是jQuery 2.2.4和方法$.post

出了什么问题?

更新:测试升级:

enter image description here

成功更新:

AWS文档可能非常庞大。我没有意识到你必须导出一个客户端生成的SDK ,它有一个全局变量,它根据你提供的资源生成方法。因此,当我使用这个代码时,我最终可以返回一个成功的结果:

  const apigClient = apigClientFactory.newClient();

    apigClient.purchaseTokenPost({}, card, {})
        .then(function(result){
            console.log(result);
        }).catch(function(result){
            console.log(result);
        });

2 个答案:

答案 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密钥(我对实际密钥进行了加扰)