浏览器如何“流式传输”压缩响应?

时间:2015-09-27 18:59:53

标签: html browser compression

我有一个大的HTML文件,我使用gzip压缩它。我注意到在HTTP响应完成之前,浏览器开始显示文件中的内容。您可以在命令行上模仿它:

curl -v -H 'Accept-Encoding: gzip' --limit-rate 2K 'http://www.theguardian.com/uk' | gzip --decompress

我正在尝试了解浏览器如何执行此操作。我对压缩的理解是整个文件被压缩了,你需要一个完整的响应才能解压缩,但这显然不正确。

浏览器如何设法在“块”中解压缩响应?这与压缩技术有关吗?

1 个答案:

答案 0 :(得分:6)

不,您不需要完整的响应来解压缩它。压缩数据(gzip流中使用的格式)是一系列编码的文字字节和长度/距离对(与先前未压缩的数据匹配),这些代码在收到后立即开始生成未压缩的数据。

动态deflate块有大约60到80字节的头描述代码,所以你只需要等待gzip头(10个字节)和第一个动态头能够开始生成未压缩的数据。固定代码deflate块使用预定义的代码集,因此您开始从前两个字节中获取数据。