HTTP - 如何发送多个预先缓存的gzip压缩块?

时间:2013-05-24 16:56:46

标签: node.js http google-chrome gzip zlib

假设我在内存中有2个单独的gziped html块。 我可以将chunk1 + chunk2发送到HTTP客户端吗?有没有浏览器支持这个? 或者没有办法做到这一点,我必须gzip整个流而不是单个块?

我想为客户端服务,例如chunk1 + chunk2和chunk2 + chunk1等(不同的顺序),但我不想每次压缩整个页面,我不想缓存整个页面。我想使用预压缩的缓存块并发送它们。

nodejs代码(节点v0.10.7):

// creating pre cached data buffers
var zlib = require('zlib');
var chunk1, chunk2;
zlib.gzip(new Buffer('test1'), function(err, data){
  chunk1 = data;
});
zlib.gzip(new Buffer('test2'), function(err, data){
  chunk2 = data;
});


var http = require('http');
http.createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain', 'Content-Encoding': 'gzip'});
      // writing two pre gziped buffers
      res.write(chunk1); // if I send only this one everything is OK
      res.write(chunk2); // if I send two chunks Chrome trying to download file
      res.end();
}).listen(8080);

当我的示例服务器返回这种响应Chrome浏览器显示下载窗口时(它不理解它:/

1 个答案:

答案 0 :(得分:4)

我还没有尝试过,但是如果http客户端符合RFC 1952,那么他们应该接受连接的gzip流,并使用相同的结果对它们进行解压缩,就像将数据全部压缩到一个流中一样。 RFC 2616中的HTTP 1.1标准实际上是指RFC 1952。

如果通过“chunks”指的是分块传输编码,那么这与压缩无关。如果客户端确实接受连接流,则没有理由将分块传输编码边界与其中的gzip流对齐。

至于如何操作,只需gzip你的作品并直接连接它们。无需其他格式或准备工作。