当前位置: 首页 > 面试题库 >

将AJAX转换为AWS上的Elasticsearch时发生CORS问题

鲁杜吟
2023-03-14
问题内容

我在javascript中有一个演示客户端,该客户端试图在Amazon AWS Cloud上愉快运行的Elasticsearch上进行搜索。

事情是,我得到了返回的结果(小提琴手显示它应该很好地在JSON中出现)。但是浏览器正在用这个打我:

XMLHttpRequest cannot load http://ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com:9200/pekara/hljeb/_search. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:7000' is therefore not allowed access.

这是我使用的演示Ajax:

  var searchString = "http://ec2-xx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com:9200/pekara/hljeb/_search";

        debugger;
        $.ajax({
            url: searchString,
            type: 'POST',
            contentType: 'application/json; charset=UTF-8',
            dataType: "json",
            crossDomain: true,
            data: JSON.stringify(data),
            success: function (data) {
                console.log("And this is success: " + data);

                $("#contentholder").text(data);
            }
        }).fail(function (error) {
            console.log("Search Failed")
        })
    }

因此重复一遍,Fiddler显示结果返回了,但是浏览器每次都指向失败方法。在此示例中,如何解决CORS?

该演示应用程序正在Node.js上运行。

这是我的elasticsearch.yaml文件的内容:

该文件的其余部分是默认的,这意味着所有内容都被注释掉了:

    {
  "cluster.name": "Mycluster",
  "node.name": "My-node",
  "cloud": {
    "aws": {
      "access_key": "xxxxxxxxxxxxxxxxxxxxxx",
      "secret_key": "xxxxxxxxxxxxxxxxx"
    }
  },
  "discovery": {
    "type": "ec2",
          "ec2" : {
        "groups": "Elastic-Search-GROUP"
   }
 }
}


http.cors.allow-origin: true,
http.cors.allow-methods: true,
http.cors.allow-headers: true,
http.cors.allow-credentials: true,
http.cors.enabled: true

问题答案:

CORS已实施且仅适用于浏览器而非应用程序(Fiddler / Rest Client等)

您的服务器需要允许将要通过javascript访问服务的域。配置您的elasticsearch。更新http配置以执行此操作。相关属性:http.cors.enabledhttp.cors.allow- originhttp.cors.allow-methodshttp.cors.allow-headershttp.cors.allow- credentials

如果要通过vm参数执行此操作,请在启动过程时使用以下参数:

elasticsearch -Des.http.<property1>=<val1> -Des.http.<property2>=<val2> ...

[编辑]

通过添加以下内容来扩展.json文件:

"http": {
    "cors.enabled" : true,
    "cors.allow-origin": "*"
}


 类似资料:
  • 问题内容: 我正在从客户端向Google oauth 2 API 进行ajax调用以获取访问令牌,但出现以下错误: 对预检请求的响应未通过访问控制检查:在所请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http://blah-blah.com ” 我希望该调用为ajax,以便通过或换句话说,在进行调用时不会打扰用户,我如何获得访问令牌以

  • 问题内容: 我正在使用jQuery ajax将请求发送到某些API。由于有CORS政策,我在浏览器的控制台上收到了CORS错误 这是通过代码 错误 所请求的资源上存在“ Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http://www.mywebsite.com ”。 我尝试通过安装chrome扩展程序以启用允许跨源请求来解决此问题。此扩展以某种方式解决了

  • 问题内容: 升级到Xcode 9.3(9E145)后,我的应用程序显示了一些意外行为。看来问题在于将NSNumber强制转换为Float。我为此使用类型强制转换运算符。请参见以下示例。 在此,第一次强制转换失败,即。第二次强制转换成功,并且使用构造函数实例化Float 也成功,即。从n到Double的转换成功,对我而言,这毫无意义。 谁能向我解释这种行为?即是谁能给我一个很好的理由,说明为什么将n

  • 问题内容: 我正在尝试将变量发送到进行AJAX调用的同一页面。 仅当我分开PHP脚本时(例如,相应地更改AJAX ),我才能收到成功的结果。 同一页是否可以捕获和处理我们使用AJAX传递的变量? 问题答案: 您在AJAX设置中进行了设置,因此您应该使用json对象而不是String(HTML)。 使用 代替,然后将PHP放在页面的顶部。因此,在检查是否存在HTML之前,不会回显任何HTML 。 另

  • 问题内容: 我正在尝试使用jquery ajax进行api调用,我正在使用curl进行api,但是我的ajax抛出了HTTP 500 我有一个curl命令,看起来像这样: 我像这样尝试过ajax,但无法正常工作: 我想念什么? 问题答案: 默认情况下,$。ajax()将转换为查询字符串(如果还不是字符串),因为这里是一个对象,请将其更改为字符串,然后设置,这样它就不会转换为查询字符串。

  • 问题内容: 我想将elasticsearch搜索结果转换为Json Object。我还没有找到任何直接转换的正确方法。 有什么方法可以将ElasticSearch响应转换为Json对象吗? 问题答案: 在Java中,您可以直接将SearchResponse转换为JSONObject。以下是方便的代码。