如何在单个http响应中发送多个先前压缩的文件以供脚本使用?

时间:2017-09-15 08:04:55

标签: javascript java http httpresponse http-compression

我们有一个场景,我们在一个响应中发送多个json文件。这些json文件作为单独的blob存储在后端(aerospike blobstore)中,并且是为响应单个请求而动态获取的。

只要我们发送这些blob未压缩它的工作正常。即我们在每个blob之后添加一个分隔符,并使用此分隔符来隔离每个json blob,如下所示 -

{
// first json here
}
-- JSONEND--blobid1

{
// second json here
}
-- JSONEND--blobid2

等等。

只要Blob从源代码中解压缩,即blob存储就可以正常工作,我们可以在解析后将javascript中的每个json隔离成一个单独的变量。

但我们面临的挑战是 - 这些blob由于各种原因(性能/减少的磁盘空间)进行了预压缩并保存到blobstore中,我们希望简单地将这些压缩blob发送到客户端的一个响应中。客户端的脚本使用这些blob并将它们解析为单独的json对象树。

这可能吗?怎么样 ?我们只需要支持chrome和firefox。

2 个答案:

答案 0 :(得分:1)

如果您使用Gzip并且您拥有nodejs服务器

请参阅此处,如何使用gzjoin

gzjoin.c
    join gzip files without recalculating the crc or recompressing
    - illustrates the use of the Z_BLOCK flush parameter for inflate()
    - illustrates the use of crc32_combine()

https://github.com/nodejs/node/tree/master/deps/zlib/examples

Zlib文档: https://nodejs.org/api/zlib.html#zlib_zlib

答案 1 :(得分:0)

这是正确的答案:

gzlog.c
gzlog.h
    efficiently and robustly maintain a message log file in gzip format
    - illustrates use of raw deflate, Z_PARTIAL_FLUSH, deflatePrime(),
      and deflateSetDictionary()
    - illustrates use of a gzip header extra field

OR

zpipe.c
    reads and writes zlib streams from stdin to stdout
    - illustrates the proper use of deflate() and inflate()
    - deeply commented in zlib_how.html (see above)

OR

zran.c
    index a zlib or gzip stream and randomly access it
    - illustrates the use of Z_BLOCK, inflatePrime(), and
      inflateSetDictionary() to provide random access