HTTP / 2流和静态压缩

时间:2018-06-23 14:11:12

标签: stream compression http2

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

  • 我想以可能的最高压缩率压缩文件,而这是在构建时静态完成的

  • 我想流式传输HTML,因此浏览器会尽快收到<head>,并且可以预取资源或从本地缓存中检索资源

但是在接收所有数据之前无法读取已压缩的文件,对吗?

我应该放弃压缩,还是应该分别压缩HTML流块?有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

  

但是在接收所有数据之前无法读取已压缩的文件吗?

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

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

  基于pef的压缩离子(例如gzip,brotli)可以在不接收所有数据的情况下进行压缩

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

  

基于deflate的压缩(例如gzip,brotli)可以被删除(-49,8),而无需接收所有数据。

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

通常,在逐行加载JPEG图像时(非渐进式JPEG),或者在加载更多数据时增强模糊图像(渐进式JPEG),通常会显示JPEG。 >