Websocket共享LZ77滑动窗口 - 带有上下文接管

时间:2017-06-23 09:31:54

标签: websocket zlib deflate permessagedeflate

我正在研究渗透 - 放气的rfc,我不理解有关'sharing LZ77 Sliding window' (section 7.2.3.2.)的部分

它表示如果“商定参数”不包含“client_no_context_takeover”扩展参数,则客户端可以通过引用LZ77滑动窗口中的历史记录将下一条消息的有效负载压缩为更少的字节。

服务器如何知道客户端是使用相同的滑动窗口还是使用新的滑动窗口? 服务器如何解压缩消息? 我如何使用Zlib(或任何其他lib)压缩/解压缩这样的消息?

1 个答案:

答案 0 :(得分:1)

如果同意client_no_context_takeover,则始终假设下一条消息可以使用先前的滑动窗口内容。如果没有,则不会引用前一个窗口,也不会造成任何损害。您必须继续假设任何压缩消息都可以引用滑动窗口并更新滑动窗口,因为第三条消息可以引用滑动窗口中的第一条和第二条消息,即使第二条消息没有引用第一条消息

要解压缩,请维护zlib inflate实例并继续为其提供压缩数据。 inflate实例将为您维护滑动窗口。将00 00 ff ff附加到每封压缩邮件,并将其提供给inflate()。如果在压缩数据中引用,则每个后续消息将使用由先前消息构建的滑动窗口。