如何为所有XMLHTTPRequests设置默认标头

时间:2016-06-22 09:22:12

标签: javascript ajax nginx kibana

问题描述

我们正在运行Kibana 4.3服务。我不想修改源代码。

目标是添加一个加密的令牌,将其称为A-Token,用于浏览器向Kibana发出的每个Ajax请求。

背景

Kibana服务由nginx代理。

当用户向Kibana服务发出Ajax请求时,该请求被nginx http_auth_request代理拦截并传递给" auth"验证令牌的服务。如果它丢失或无效,那么" auth"将201返回到http_auth_request并执行对Kibana服务的请求,否则返回404并且拒绝该请求,因为它是在没有有效令牌的情况下生成的。

(此方案基于加密令牌模式,通常用于在无会话情况(如手头的情况下)中跨站点脚本的对策。

我阅读了W3 XMLHttpRequest文档,似乎setRequestHeader需要在打开之后和发送之前运行 - 这意味着这种方案在一般情况下是不可能的,或者非常依赖JS平台。

使用Jquery .ajaxSetup进行的测试(如此示例)确认无法单独设置标头:

$.ajaxSetup({
    beforeSend: function(xhr) {
                xhr.setRequestHeader(A-Token", 1314159);
                  }
});

寻找可能不需要分叉Kibana的解决方案。

丹尼

1 个答案:

答案 0 :(得分:1)

我也在寻找这个问题的解决方案,但找不到任何东西,然后我想出了下一个解决方案:

        XMLHttpRequest.prototype.origOpen = XMLHttpRequest.prototype.open;
        XMLHttpRequest.prototype.open   = function () {
            this.origOpen.apply(this, arguments);
            this.setRequestHeader('X-TOKEN', 'the token');
        };