从JavaScript向SDC HTTP服务器URL发送数据显示CORS问题

时间:2017-02-09 10:52:18

标签: cors streamsets

我正在使用Streamsets管道来传输来自浏览器的数据。为此,我创建了一个带有HTTP服务器源的管道来发布来自浏览器Javascript的数据,并尝试使用REST客户端在该URL中写入,并且它成功写入。响应标头已在SDC.properties文件中设置。

http.access.control.allow.origin=*
http.access.control.allow.headers=origin, content-type, accept, authorization, x-requested-by, x-ss-user-auth-token, x-ss-rest-call
http.access.control.allow.methods=GET, POST, PUT, DELETE, OPTIONS, HEAD

但是当我尝试使用 XMLHTTPRequest 从JavaScript编写一些数据时,它会为飞行前请求抛出错误。以下是JavaScript代码:

  var http = new XMLHttpRequest();
  var value = '{ "prop1": "value 2", "prop2": "value 2" }';
  var url ='http://13.68.93.97:8100/'
  var async = true
 if ('withCredentials' in http) {
    http.open('OPTIONS', url, async);
} else if (typeof XDomainRequest != "undefined") {
    http = new XDomainRequest(); //for IE
    http.open('OPTIONS', url);
} else {
    http.open('OPTIONS', url, async);
}
    http.open('POST', url, true);
    http.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
    http.setRequestHeader('X-SDC-APPLICATION-ID', 'testApp1');
http.setRequestHeader("Access-Control-Allow-Origin", "*");
http.setRequestHeader('Access-Control-Allow-Methods', "POST, OPTIONS, GET");
http.setRequestHeader('Access-Control-Allow-Credentials', "true");
http.setRequestHeader('Access-Control-Expose-Headers', "X-Region");
http.setRequestHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Accept-language");
http.withCredentials = true;
http.onreadystatechange = function () {
    if (http.readyState == 4 && http.status == 200) {
        console.log(http.responseText);
    }
}
http.send(value); 

从上面的代码执行中抛出错误:

  

XMLHttpRequest无法加载http://13.68.93.97:8100/。回应   预检请求未通过访问控制检查:否   请求中存在“Access-Control-Allow-Origin”标头   资源。因此,不允许原点“http://localhost”访问。

任何帮助都会非常有用。感谢.. !!

1 个答案:

答案 0 :(得分:1)

更新 - Data Collector在2017年3月发布的版本2.4.0.0中添加了CORS支持

StreamSets Data Collector当前不支持HTTP Server origin中的CORS - sdc.properties文件中的那些属性用于SDC Web UI。我已经提交了一个Jira,SDC-5298,但我对你的用例感到好奇。您是仅使用浏览器进行实验,还是看到用户通过JavaScript向SDC发送数据的生产用例?

如果您有生产用例,请对该Jira发表评论,我们将考虑将CORS添加到HTTP Server源。

如果您只是想要一种轻松发送数据的方法,您可以选择以下几种方法:

    <击>
  1. 使用命令行中的curl:

    curl http://localhost:8000/ -H 'X-SDC-APPLICATION-ID: bob' -d '{"a":"b"}'
    
  2. 安装Chrome扩展程序(例如CORS Toggle)以停用Chrome中的CORS检查。

  3. 使用--disable-web-security选项启动Chrome。