2017-03-03 79 views
2

我正尝试使用在浏览器中运行的jQuery脚本将数据写入Splunk。我已经在我的“inputs.conf”文件如下:使用Splunk获取CORS错误

crossOriginSharingPolicy = * 

但是,我得到的错误是:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://myserver.myco.com:8088/services/collector/event. 
(Reason: missing token 'content-type' in CORS header 'Access-Control-Allow-Headers' from CORS preflight channel). 

我还没有找到一个方法来设置“访问 - Control-Allow-Headers'来自Splunk。

这里是JS代码片段,虽然我不知道它甚至需要显示它(注释行的事情,我在绝望中尝试过,但他们并没有区别):

var dfr = $.ajax({ 
     url: config.endpoint, 
     method: 'post', 
//  headers: { 
//   "Access-Control-Allow-Origin" : "*", 
//   "Access-Control-Allow-Methods" : "GET,POST,PUT,DELETE,OPTIONS", 
//   "Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With" 
//  }, 
//  crossDomain: true, 
     beforeSend: function (xhr) { 
      xhr.setRequestHeader("Authorization", header); 
     }, 
     data: JSON.stringify({ event: post }), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json" 
    }); 

有什么建议吗?我是否需要通过代理访问Splunk?

回答

1

我想你可能需要设置contentType: application/x-www-form-urlencoded并将数据格式设置为这样(即,基本上就像普通查询字符串:名称 - 值对名称后跟=,然后是值,名称值通过&彼此分开)。

这是因为看来Splunk根本不支持application/json请求。

Discussion elsewhere表示它预计POSTsapplication/x-www-form-urlencoded

但是,这只会修复content-type问题。由于您的请求发送了一个Authorization请求标头,这也会触发一个触发器CORS preflight OPTIONS request

如果Access-Control-Allow-Headers响应标题Splunk发送回来不包括Authorization,那么你会遇到与Content-Type相同的问题。

尽管如此,也许在幕后Splunk已经在Access-Control-Allow-Headers响应标题中发回的一组标题名称中包含Authorization