通过节点stream式传输连续的HTTP响应

我试图作为客户端和使用NodeJS服务器的IP摄像机之间的代理。 当我请求来自相机的实时stream时,它响应

HTTP/1.0 200 OK Content-Type: Application/octet-stream 

随后是连续的数据stream。 如果我在Chrome中打开相机stream,它会启动一个永不停止的下载,并启动一个连续的响应。

Node似乎是缓冲来自摄像机的响应,并且每次都通过它的HTTPparsing器parsing它。 这是第一次正常工作,因为它有正确的标题,但它的错误与第二个数据缓冲区

 HPE_INVALID_HEADER_TOKEN 

有人可以请帮忙解释为什么发生这种情况? 这是一个连续的数据stream,为什么它试图parsing第二个缓冲区的HTTP头? 我不确定是否有我缺less的选项,或者我的相机没有正确遵循HTTP规范。

编辑:示例代码

 const options = { family: 4, headers: { Authorization: 'Basic ' + base64EncodedAuth, }, host: '192.168.1.131', method: 'GET', path: '/cgi-bin/realmonitor.cgi?action=getStream&channel=1&subtype=0', port: 80, protocol:'http:', }; const req = http.request(options, (res) => { console.log(`STATUS: ${res.statusCode}`); console.log(`HEADERS: ${JSON.stringify(res.headers)}`); res.on('data', (chunk) => { console.log(`BODY: ${chunk}`); }); res.on('end', () => { console.log('No more data in response.'); }); }); req.on('error', (e) => { console.log(`problem with request: ${e.message}`); }); req.end(); 

唯一的callback就是“错误”。

我进一步检查了照相机的curl日志,注意到一切都被标记为:

<= Recv header

永远不会发送HTTP规范所要求的单独的CRLF来表示所有的头已经被发送。 这就是为什么parsing器试图parsing它作为一个头,而且很正确地,抛出一个错误。