我需要在节点和C ++中都实现一个http2服务器。无论如何,我无法掌握如何通过静态压缩使流工作:
我想以可能的最高压缩率压缩文件,而这是在构建时静态完成的
我想流式传输HTML,因此浏览器会尽快收到<head>
,并且可以预取资源或从本地缓存中检索资源
但是在接收所有数据之前无法读取已压缩的文件,对吗?
我应该放弃压缩,还是应该分别压缩HTML流块?有更好的方法吗?
答案 0 :(得分:1)
但是在接收所有数据之前无法读取已压缩的文件吗?
(通常)这是不正确的。用于HTML文件的基于Deflate的压缩(例如gzip,brotli)可以在不接收所有数据的情况下进行解压缩。
这些工作主要是通过反向引用数据来完成的。例如,上面的句子重复引用了文本“ compress”:
基于pef的压缩离子(例如gzip,brotli)可以在不接收所有数据的情况下进行压缩。
因此,第二个实例可以用对第一个实例的反向引用替换:
基于deflate的压缩(例如gzip,brotli)可以被删除(-49,8),而无需接收所有数据。
因此,您可以看到,只要您按顺序阅读(HTTP保证)并且从头开始阅读,那么您就不需要任何后续数据来解压缩已经收到的内容-但是您确实需要任何先前的数据。文字。
通常,在逐行加载JPEG图像时(非渐进式JPEG),或者在加载更多数据时增强模糊图像(渐进式JPEG),通常会显示JPEG。 >