使用Splunk获取CORS错误

时间:2017-03-03 22:38:01

标签: jquery cors splunk

我正在尝试使用在浏览器中运行的jQuery脚本向Splunk写入数据。我已经在我的" inputs.conf'中提供了以下内容:档案:

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).  

我还没有找到一种方法来设置“访问控制 - 允许 - 标题”'来自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 个答案:

答案 0 :(得分:1)

我认为您可能需要设置contentType: application/x-www-form-urlencoded并将数据格式化为(即,基本上就像普通查询字符串一样:名称 - 值对,名称后跟=然后是值,其中名称 - 值对由&分隔开。)

那是因为Splunk似乎根本不支持application/json个请求。

Discussion elsewhere表示期望POSTsapplication/x-www-form-urlencoded

但这只会解决content-type问题。由于您的请求会发送Authorization请求标头,因此它也会触发CORS preflight OPTIONS request触发器。

如果Splunk发回的Access-Control-Allow-Headers响应标头不包含Authorization,那么您将遇到与Content-Type相同的问题。

Dunno虽然可能在幕后Splunk已经在Authorization响应标题中发回的标题名称集中包含Access-Control-Allow-Headers