HTTP/2 流和静态压缩
Posted
技术标签:
【中文标题】HTTP/2 流和静态压缩【英文标题】:HTTP/2 Streaming and static compression 【发布时间】:2018-06-23 14:11:11 【问题描述】:我需要在 node 和 C++ 中实现一个 http2 服务器。无论如何,我无法掌握如何使流式处理与静态压缩一起工作:
我想以尽可能高的压缩率压缩我的文件,这是在构建时静态完成的
我想流式传输我的 html,因此浏览器会尽快收到 <head>
,并且可以预取资源或从本地缓存中检索它们
但是在收到所有数据之前无法读取压缩文件,是吗?
我应该放弃压缩,还是应该单独压缩 HTML 流块?有没有更好的办法?
【问题讨论】:
【参考方案1】:但是在接收到所有数据之前无法读取压缩的文件,是吗?
这(通常)是不正确的。用于 HTML 文件的基于 Deflate 的压缩(例如 gzip、brotli)可以在不接收所有数据的情况下解压缩。
这些主要通过反向引用数据来工作。例如上面的句子重复引用了文本“compress”:
基于Deflate的压缩ion(例如gzip、brotli)可以在不接收所有数据的情况下进行压缩。
所以第二个实例可以替换为对第一个实例的反向引用:
可以在不接收所有数据的情况下对基于 Deflate 的压缩(例如 gzip、brotli)进行 de(-49,8)。
所以您可以看到,只要您按顺序阅读(HTTP 保证)并且从头开始,那么您不需要任何后续数据来解压您已经收到的内容 - 但您确实需要任何以前的文本。
同样,JPEG 通常在完全接收之前就显示出来,要么逐行加载(非渐进式 JPEG),要么通过加载更多数据而增强的模糊图像(渐进式 JPEG)。
【讨论】:
谢谢,我刚刚对其进行了测试,它可以跨操作系统和浏览器运行。唯一的问题是 brotli 不支持从命令行解压缩截断的文件。 说实话,我认为大多数 gzip 客户端都不会。不是因为我展示的任何技术原因 - 更多是因为可能对它没有太多要求,并且还警告您文件已被切断。以上是关于HTTP/2 流和静态压缩的主要内容,如果未能解决你的问题,请参考以下文章