我使用节点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' }
我的要求是保留请求中传递的标头的大写,以便我的应用程序可以验证和授权它。 如果有任何方法可以告诉我,
非常感谢
答案 0 :(得分:5)
FWIW HTTP头字段名称是case- 不敏感所以这个案子真的不重要。
但是,节点 通过req.rawHeaders
提供对原始标题(包括重复项)的访问。由于self.show()
是一个数组(格式为req.rawHeaders
),因此您需要对其进行迭代以找到您要查找的标题。