HTTP/2 流媒体和静态压缩

HTTP/2 Streaming and static compression

我需要在节点和 C++ 中实现一个 http2 服务器。无论如何,我无法掌握如何使流式传输与静态压缩一起工作:

但是在接收到所有数据之前无法读取压缩文件,可以吗?

我应该放弃压缩,还是应该单独压缩 HTML 个流块?有没有更好的方法?

But files that are compressed can't be read before receiving all the data, can they?

这(通常)是不正确的。用于 HTML 文件的基于 Deflate 的压缩(例如 gzip、brotli)可以在不接收所有数据的情况下解压缩。

这些主要通过反向引用数据来工作。例如,上面的句子重复引用了文本“compress”:

Deflate based compression (e.g. gzip, brotli) can be decompressed without receiving all the data.

因此第二个实例可以替换为对第一个实例的反向引用:

Deflate based compression (e.g. gzip, brotli) can be de(-49,8)ed without receiving all the data.

所以你可以看到,只要你按顺序(HTTP 保证)从头开始阅读,那么你不需要任何后续数据来解压缩你已经收到的内容 - 但你确实需要任何以前的文本。

类似地,JPEG 通常在完全接收之前显示,要么通过逐行加载(非渐进式 JPEG),要么通过加载更多数据时模糊图像得到增强(渐进式 JPEG)。