即使启用了CORS,AJAX似乎也无法获得AWS API网关

时间:2016-12-17 13:05:35

标签: ajax cors aws-api-gateway

我已经建立了一个API网关,可以在AWS上调用lambda函数。 GET的链接是:

https://z4eiy7g9n0.execute-api.us-east-1.amazonaws.com/test/rotation

单击它应该返回一个大于6000的数字。我想使用Javascript来获取API,我的理解是我需要使用AJAX来做到这一点。所以,我有以下javascript(导入jQuery 3.1.1):

$(document).ready(function(){
    $("button").click(function(){
        $.ajax({
         url: "https://z4eiy7g9n0.execute-api.us-east-1.amazonaws.com/test/rotation",
         headers: {"Content-Type": "text/json"},
         type: "GET",
         success: function() { alert('Success!'); }
      });
    });
});

由于跨源的原因,这不起作用,所以我的理解是我需要启用CORS。所以,我按照http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html中的说明进行操作。我有

Access-Control-Allow-Origin*: '*'
Access-Control-Allow-Headers: 'Content-Type'

我对此的理解是,原点可以是任何域,唯一需要包含的标题是“内容类型”。但是,当我单击我的按钮来触发此事件时,我在控制台中收到以下错误。

  

XMLHttpRequest无法加载   https://z4eiy7g9n0.execute-api.us-east-1.amazonaws.com/test/rotation。   对预检请求的响应没有通过访问控制检查:否   '访问控制允许来源'标题出现在请求的上   资源。起源' http:// ****'因此不允许访问。该   响应有HTTP状态代码403。

现在,我可以使用httr包从R调用API,所以我知道可以从至少某些系统调用它。

我的AJAX请求或API有什么问题?

2 个答案:

答案 0 :(得分:0)

我已经成功使用AJAX连接到支持CORS的API,我不记得在标题中传递内容类型。您是否尝试过application/json而不是text/json?我相信这是AWS控制台上CORS向导配置的方式。

答案 1 :(得分:0)

问题是我没有在启用CORS的情况下部署修改后的资源。一旦我部署了资源,javascript就开始正常运行了。