【发布时间】:2017-03-13 00:50:35
【问题描述】:
我正在尝试使用 NodeJS 服务器充当客户端和 IP 摄像机之间的代理。当我从摄像头请求实时流时,它会响应
HTTP/1.0 200 OK
Content-Type: Application/octet-stream
接着是连续的数据流。如果我在 Chrome 中打开相机流,它会启动一个永无止境的下载,并且 curl 它也会启动一个持续响应。
Node 似乎正在缓冲来自摄像头的响应,并每次都通过其 HTTP 解析器对其进行解析。这第一次工作正常,因为它具有正确的标头,但在第二个数据缓冲区时它会出错
HPE_INVALID_HEADER_TOKEN
有人可以帮忙解释一下为什么会这样吗?这是一个连续的数据流,为什么要解析第二个缓冲区上的 HTTP 标头?我不确定是否缺少某个选项,或者我的相机没有正确遵循 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();
唯一被命中的回调是“错误”。
【问题讨论】:
-
您能否向我们展示您的 node.js 代码,以便我们了解您实际在做什么。有关代码的问题应始终包含您的代码。我猜您想通过管道传输响应,以便只要发送新数据,它就会继续运行。
-
我添加了示例代码。最初,我使用的是请求包并通过管道传输响应,但在传输任何响应之前我遇到了同样的错误。
-
不能通过原始tcp或udp套接字获取数据吗?我想你不会有 HTTP 解析的问题。
-
你说唯一被命中的回调是错误回调。那么当
error被命中时,报错信息是什么? -
@LuizFernandodaSilva - 这是我的下一个计划,我只是好奇为什么我会在 HTTP 解析中看到这种行为。
标签: node.js http npm stream request