使用 Splunk 获取 CORS 错误
Posted
技术标签:
【中文标题】使用 Splunk 获取 CORS 错误【英文标题】:Getting CORS Errors with Splunk 【发布时间】:2017-07-24 04:46:27 【问题描述】:我正在尝试使用在浏览器中运行的 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 设置“Access-Control-Allow-Headers”的方法。
这是 JS 代码的 sn-p,虽然我不确定是否有必要显示它(注释行是我绝望地尝试过的东西,但它们没有任何区别):
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 表示它期望 POSTs
为 application/x-www-form-urlencoded
。
但这只能解决content-type
问题。因为您的请求发送了一个Authorization
请求标头,所以它本身也会触发一个CORS preflight OPTIONS
request 的触发器。
如果 Splunk 发回的 Access-Control-Allow-Headers
标头不包含 Authorization
,那么您将遇到与 Content-Type
相同的问题。
但不知道,也许 Splunk 在幕后已经将 Authorization
包含在它发回的 Access-Control-Allow-Headers
响应标头中的标头名称集中。
【讨论】:
以上是关于使用 Splunk 获取 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Angular 错误处理获取控制台上出现的 CORS 错误?
为啥使用 axios 从 XML 中获取数据会引发 cors 错误? [复制]
使用 .getJSON 获取 Play 商店应用详细信息时出现跨域阻止请求 [CORS] 错误