我有一个大的HTML文件,我使用gzip压缩它。我注意到在HTTP响应完成之前,浏览器开始显示文件中的内容。您可以在命令行上模仿它:
curl -v -H 'Accept-Encoding: gzip' --limit-rate 2K 'http://www.theguardian.com/uk' | gzip --decompress
我正在尝试了解浏览器如何执行此操作。我对压缩的理解是整个文件被压缩了,你需要一个完整的响应才能解压缩,但这显然不正确。
浏览器如何设法在“块”中解压缩响应?这与压缩技术有关吗?
答案 0 :(得分:6)
不,您不需要完整的响应来解压缩它。压缩数据(gzip流中使用的格式)是一系列编码的文字字节和长度/距离对(与先前未压缩的数据匹配),这些代码在收到后立即开始生成未压缩的数据。
动态deflate块有大约60到80字节的头描述代码,所以你只需要等待gzip头(10个字节)和第一个动态头能够开始生成未压缩的数据。固定代码deflate块使用预定义的代码集,因此您开始从前两个字节中获取数据。