在一篇关于远程调用框架的文章中的过滤器(向下滚动约 50%)一章中提到了 2 种压缩方式:
- ZLib 无状态压缩
- ZLib 有状态压缩
它们之间有什么区别?是与 ZLib 相关还是这些常见的压缩方法?
在搜索时,我只能找到有状态和无状态的 web 服务。属性 stateless/ful 不是用来描述压缩方法吗?
在一篇关于远程调用框架的文章中的过滤器(向下滚动约 50%)一章中提到了 2 种压缩方式:
它们之间有什么区别?是与 ZLib 相关还是这些常见的压缩方法?
在搜索时,我只能找到有状态和无状态的 web 服务。属性 stateless/ful 不是用来描述压缩方法吗?
来自传输层安全协议压缩方法:
与 TLS 一起使用的压缩方法可以是有状态的(压缩器通过所有压缩记录保持其状态)或无状态(压缩器独立压缩每个记录),但在 TLS 中使用无状态压缩方法似乎鲜为人知。
一些压缩方法能够
在压缩和解压缩数据包有效负载时保留历史信息。与按数据包压缩相比,
压缩历史允许在流上实现更高的压缩率,但
跨数据包维护历史意味着数据包可能包含完全解压缩不同数据包中包含的数据所需的数据。因此,历史维护需要可靠的链路和有序的数据包传递。由于 TLS 和低层协议提供可靠的、有序的数据包传递,如果压缩方法支持,可以维护和利用压缩历史信息。
一般来说,无状态描述任何没有过去事件记忆的过程,而有状态描述任何有这种记忆的过程(并使用它来做出决定)。
因此,在压缩中,无状态意味着它看到的任何数据块都会进行压缩,而不依赖于先前的输入。它更快但通常压缩更少;有状态压缩查看以前的数据来决定如何压缩当前数据,它速度较慢但压缩得更好。
Zlib 是一种自适应的压缩算法。所有压缩算法都有效,因为它们处理的数据并非完全随机。相反,他们的输入数据具有可以被利用的非均匀分布。以英文文本为例。字母e
远比字母更常见q
。Zlib 将检测到这一点,并为字母使用更少的位e
。
现在,当您发送大量短文本消息时,并且您知道它们都是英文的,您应该使用 Zlib 状态压缩。e
它将在所有消息中保留字母的低位表示。但是如果有中文、日文、法文等混杂的消息,状态压缩就不再那么聪明了。e
日语文本中的字母很少。无状态压缩将检查每条消息哪些字母是常见的。ZLib 无状态压缩的一个著名示例是 PNG 文件格式,它在 2 个不同的图像之间保持任何状态。