Node.js v9.2.1
问题:
我见过的所有示例都使用某种类型的库(http,request),它们在命中zlib之前实现了至少某种类型的头解析。那么zlib实际上看到的似乎并不是原始的反应。同样在这些示例中,在关闭连接时会触发“结束”事件。我的例子没有这样的事件。
对于这个问题,我们假设我使用了一个死的简单的net.Socket,它具有持久的TCP连接,如下所示:
var net = require('net');
var chunks = [];
var socket = net.connect({
port: foo,
host: bar
}, () => {
socket.write('<perfectRequestHeaders>', null, () => {
socket.on('data', (chunk) => {
chunks.push(chunk);
})
})
})
然后我决定收到所有的块。 (没有'结束'事件,因为连接保持打开状态。一旦我看到终止块,我才知道完整的响应。
var zlib = require('zlib');
var resBuffer = Buffer.concate(chunks);
var headerEndIndex = resBuffer.indexOf('\r\n\r\n');
var headerBuffer = resBuffer.slice(0, headerEndIndex),
bodyBuffer = resBuffer.slice(headerEndIndex + 4);
// assume headerBuffer & bodyBuffer are what their names imply
function bodyParser(bodyBuffer) {
// assume it parses out all the stuff that
// isn't part of the actual chunked data
return parsedBodyBuffer;
}
// complains about header check
// what must be done to stop zlib from whining???
zlib.gunzipSync(bodyParser(bodyBuffer)).toString('utf-8');
欢迎任何帮助。谢谢。