HTTP/2 流媒体和静态压缩
HTTP/2 Streaming and static compression
我需要在节点和 C++ 中实现一个 http2 服务器。无论如何,我无法掌握如何使流式传输与静态压缩一起工作:
我想以尽可能高的压缩率压缩我的文件,这是在构建时静态完成的
我想流式传输我的 HTML,以便浏览器尽快收到 <head>
,并且可以预取资源或从本地缓存中检索它们
但是在接收到所有数据之前无法读取压缩文件,可以吗?
我应该放弃压缩,还是应该单独压缩 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)。
我需要在节点和 C++ 中实现一个 http2 服务器。无论如何,我无法掌握如何使流式传输与静态压缩一起工作:
我想以尽可能高的压缩率压缩我的文件,这是在构建时静态完成的
我想流式传输我的 HTML,以便浏览器尽快收到
<head>
,并且可以预取资源或从本地缓存中检索它们
但是在接收到所有数据之前无法读取压缩文件,可以吗?
我应该放弃压缩,还是应该单独压缩 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)。