1

我正在尝试使用 gzip 以块的形式发送响应,但是从以下示例中,我在 Chrome 中得到了“Hello�S�/�I�m�S��k�”而不是“Hello World!”

var http = require('http'),
    zlib = require('zlib');

http.createServer(function(req, res) {
    res.writeHead(200, {
        'Content-Type': 'html/text',
        'Transfer-Encoding': 'chunked',
        'Content-Encoding': 'gzip',
        'Content-Type': 'text/html;charset=UTF-8'
    });

    zlib.gzip("Hello", function(_, result) {
        res.write(result);
    });

    zlib.gzip(" World", function(_, result) {
        res.write(result);
    });

    zlib.gzip('!', function(_, result) {
        res.end(result);
    });

}).listen(1337, '127.0.0.1');

console.log('Server running at http://127.0.0.1:1337/');
4

1 回答 1

2

这不是分块传输编码的含义。

请参阅HTTP 标准中的描述。简而言之,分块编码由具有 ASCII 十六进制块长度的块组成,后跟一个 CRLF,然后是那么多字节,然后是另一个 CRLF。重复,以零长度块和另一个 CRLF 结束,以便在零长度块 CRLF 之后进行良好测量。

于 2013-07-30T04:21:30.323 回答