Node.js HTTP头大小写

Node.js HTTP头大小写,node.js,Node.js,我处理的是服务器,它不接受未资本化的头,不幸的是,我不能做太多 var headers = {}; headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'; headers['Accept'] = 'text/html,application/xhtml+xml,applic

我处理的是服务器,它不接受未资本化的头,不幸的是,我不能做太多

var headers = {};
headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36';
headers['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8';
headers['Connection'] = 'keep-alive';
headers['Cache-Control'] = 'max-age=0';
headers['Upgrade-Insecure-Requests'] = '1';
headers['Accept-Encoding'] = 'gzip, deflate';
headers['Accept-Language'] = 'en-US,en;q=0.9,ru;q=0.8,hy;q=0.7';

request.post({url: 'http://10.10.10.10/login', headers: headers, ...
这实际上发出了以下信息

User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,ru;q=0.8,hy;q=0.7
DNT: 1
host: 10.10.10.10
cookie: vvv=765936875155218941

cookie
host
为小写。如何更改
request
,以发送大写的标题?

这不是Node.js问题,而是特定库的假定问题,
request
。事实上,这根本不是问题,因为
request
使用
caseless
包强制使用小写标题,因此如果需要一致性,则预期用户标题将小写

这些头可以保持原样,因为远程服务器应该根据规范正确处理它们

如果一个请求被假定为模拟真实的客户端请求,那么可能需要指定一个特定的头案例。在这种情况下,可以在请求之前手动遍历标头对象,例如:

const normalizeHeaderCase = require("header-case-normalizer");

const req = request.post('...', { headers: ... });

for (const [name, value] of Object.entries(req.headers)) {
    delete req.headers[name];
    req.headers[normalizeHeaderCase(name)] =  value;
}

req.on('response', function(response) {...});

头名称不区分大小写。我知道,但出于某种原因,服务器不尊重这一点,我需要找到解决办法。你是说
http://10.10.10.10/login
使用小写的
主机和
cookie时行为不正确?您确定这是请求的真正问题,而不是其他问题吗?似乎这首先是服务器的问题,它不是规范编译器。我确定,因为我试图通过Fiddle模拟它。更改<代码> Cookie  >  cookie 正在成功地验证用户。考虑将此报告为bug,如果它是您的或友好的服务器。无论如何,我提供了一个解决方法,我希望它能工作。基本上我不能再使用
函数(错误、响应、正文){…}
回调,需要使用
缓冲数据。关于('data',…)
?我希望也可以使用请求回调。对于请求回调,它也可以工作,但据我所知,一旦
request.post(…)
行通过,连接就开始了。不确定是否为其生成了单独的线程,但有什么可以保证,在头规范化时,请求尚未发出?比赛条件会发生在这里吗?看起来还可以。实际的请求在内部调用request(…).start()时启动,并在下一次调用时启动。