我有以下代码,用于使用JavaScript SDK实现cloudsearch域。

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="aws-sdk-2.172.0.js"></script>
    <script type="text/javascript">
     console.log(AWS);
     AWS.config.apiVersions = {
      cloudsearch: 'latest',
    };
    var csd = new AWS.CloudSearchDomain({endpoint: 'search-mydomain-xxxxxxxxxxxxx.us-west-2.cloudsearch.amazonaws.com',region:'us-west-2'});
    var params = {query:'test'};
    csd.search(params, function (err, data) {
      if (err) console.log(err, err.stack);
      else     console.log(data);
    });
    </script>
</head>
<body>

</body>
</html>


但它在控制台中显示错误


  对预检请求的响应未通过访问控制检查:否
  请求中存在“ Access-Control-Allow-Origin”标头
  资源。因此,不允许访问源'http://example.com'。
  响应的HTTP状态码为400。


我需要在代码和AWS帐户中进行哪些更改?

最佳答案

CloudSearch不支持跨域资源共享(CORS)请求,因此您不能直接向CloudSearch域发出异步请求。遇到此问题时,我最终要做的是创建一个API网关来处理该请求,并为此添加了CORS支持。因此,API网关接受请求,设置必要的标头以启用CORS,然后将请求中继到您的CloudSearch域。

这里有一些链接可能对设置有帮助:


Using AWS API Gateway to Enable CORS for CloudSearch
Enable CORS for an API Gateway Resource

09-25 18:57