尽管我从服务器获得了有效的响应,但Ajax CORS总是失败

时间:2017-12-11 05:41:31

标签: cors cross-domain fetch

我有一个附加到API网关的AWS Lambda函数。我一直在努力设置CORS,但我无法弄清楚这里发生了什么。

这是客户请求:

        var endPoint = 'https://776v8jadw0.execute-api.us-east-1.amazonaws.com/sandbox/helpwithprogramming/contact';
        var payload = {message: 'Hello there'};
        var headers = new Headers();
        headers.append('Access-Control-Allow-Origin',  '*');
        var options = {
          method: 'POST',
          headers: headers,
          mode: 'cors',
          cache: 'default',
          body: JSON.stringify(payload)
        };

        fetch(endPoint, options)
          .then(res => {
            console.log('ok', res);
        })
        .catch(err => {
           console.log('error', err);
       });

OPTIONS方法的响应标头如下所示:API网关:

access-control-allow-headers:Access-Control-Allow-Origin,Content-Type,Authorization,X-Amz-Date,X-Api-Key,X-Amz-Security-Token
access-control-allow-methods:DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT
access-control-allow-origin:*
content-length:0
content-type:application/json
date:Mon, 11 Dec 2017 05:33:59 GMT
status:200

执行POST时,我从API网关得到以下响应:

{message: "Hello from Lambda"}

但是,我的fetch调用实际上失败了,并进入catch块并出现以下错误:

TypeError: Failed to fetch

Chrome会在控制台中显示此消息:

  

无法加载   https://776v8jadw0.execute-api.us-east-1.amazonaws.com/sandbox/helpwithprogramming/contact:   No' Access-Control-Allow-Origin'标题出现在请求的上   资源。起源' http://localhost:63342'因此是不允许的   访问。如果不透明的响应满足您的需求,请设置请求   模式为' no-cors'在禁用CORS的情况下获取资源。

1 个答案:

答案 0 :(得分:1)

在AWS控制台中导航到API网关。

  1. 选择已部署的 API
  2. RESOUCES 中选择ex: GET,POST 的HTTP方法,然后点击“操作”。
  3. 在资源操作中选择启用CORS ,然后将'*'添加到 Access-Control-Allow-Origin并启用CORS。