Nodejs不保留请求头的大写

时间:2017-04-27 18:34:59

标签: node.js

我使用节点js作为反向代理,主要使用http和http-proxy模块。在将请求发送到nodejs以重定向到我的某个应用程序时,我必须传递请求标头,这些标头都是大写的。但是,nodejs或者更确切地说是http将所有大写字母转换为小写字母,因为我的应用程序的一个验证失败了。

我的代码段是:

http.createServer(function (request, response) {

    var redirection = 'http://localhost:8000';
    var path = url.parse(request.url).path;

    switch (path) {
        case '/health':
            proxy.web(request, response, { target: redirection });
            break;
}).listen(8080);

传递的请求标头是:

curl -H "X-AUTH: PBxqcEm5sU743Cpk" -X GET http://localhost:8080/health

现在发生的事情是,标题" X-AUTH"正在转变为" x-auth"我的申请无法验证它。在我的应用程序中,标头匹配区分大小写。

从节点js请求对象打印的请求标头是:

{ host: 'localhost:8080',
  'user-agent': 'curl/7.47.1',
  accept: '*/*',
 'x-auth': 'PBxqcEm5sU743Cpk' }

我的要求是保留请求中传递的标头的大写,以便我的应用程序可以验证和授权它。 如果有任何方法可以告诉我,

非常感谢

1 个答案:

答案 0 :(得分:5)

FWIW HTTP头字段名称是case- 不敏感所以这个案子真的不重要。

但是,节点 通过req.rawHeaders提供对原始标题(包括重复项)的访问。由于self.show()是一个数组(格式为req.rawHeaders),因此您需要对其进行迭代以找到您要查找的标题。