2017-03-03 38 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