gunzip使用zlib

时间:2017-12-14 20:22:44

标签: javascript node.js gzip zlib chunked-encoding

Node.js v9.2.1

问题:

  1. 在node.js中使用内置的zlib模块时是否可以放弃标头检查?
  2. zlib在这个'标题检查'期间究竟在寻找什么?/我可以欺骗吗?
  3. 我见过的所有示例都使用某种类型的库(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');
    

    欢迎任何帮助。谢谢。

0 个答案:

没有答案