NodeJS Brotli不压缩小机构

hs1ihplo  于 2023-04-05  发布在  Node.js
关注(0)|答案(1)|浏览(180)

我试图用[]的数据压缩一个小的HTTP响应。

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Vary: Accept-Encoding
Date: Thu, 30 Mar 2023 15:50:03 GMT
Connection: close
Transfer-Encoding: chunked

2
[]
0

然而,在将压缩的Brotli发送到浏览器后,它只是挂起,好像它仍在解析数据。我想知道Brotli压缩小数据是否有问题?它适用于更大的数据量。
下面是我在NodeJS中编写的压缩数据体的代码:

import zlib from 'node:zlib';

const compressedBody = await new Promise<Buffer>((resolve, reject) => {
    zlib.brotliCompress(body, (err, data) => {
        if (err) {
            process.stderr.write('Error occured while brotli compressing');
            reject(err);
        } else {
            resolve(data);
        }
    });
});
r3i60tvu

r3i60tvu1#

在HTTP/1.1中,压缩(请求和)响应意味着只压缩有效负载。头部不压缩,也不压缩分块的编码长度。如果你压缩整个响应(就像你所做的那样),浏览器无法理解它。
带有Brotli压缩的[]有效负载的分块HTTP/1.1响应看起来是这样的:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Vary: Accept-Encoding
Content-Encoding: br
Date: Thu, 30 Mar 2023 15:50:03 GMT
Connection: close
Transfer-Encoding: chunked

6
��[]
0

注意,“压缩的”有效载荷是6字节长,而未压缩的有效载荷仅是2字节。

相关问题