整理 deflate、zlib和gzip
太长;不看 ; bù
- 毎回忘れて調べるので、書き留めておきます
忙碌的人的摘要
deflate = 圧縮アルゴリズム(LZ77 + ハフマン符号)
zlib, gzip = 圧縮ライブラリ名 兼 ヘッダ/フッタフォーマットの定義
放气
维基百科:https://ja.wikipedia.org/wiki/Deflate
Deflate(デフレート)是一种可逆数据压缩算法,结合了LZ77和哈夫曼编码。
deflate = 圧縮アルゴリズム(LZ77 + ハフマン符号)
Golangのパッケージ: https://golang.org/pkg/compress/flate/
zlib的中文释义是”压缩库”。
维基百科:https://ja.wikipedia.org/wiki/Zlib
zlib是一个免费的库,用于数据的压缩和解压缩功能。
数据格式,如头部和尾部,已经按照RFC 1950 (ZLIB Compressed Data Format Specification)进行规范化。
zlib = 圧縮ライブラリ名 兼 ヘッダ/フッタフォーマットの定義
圧縮アルゴリズムは deflate を使用
Golangのパッケージ: https://golang.org/pkg/compress/zlib/
gzip—只需要一个选项
维基百科:https://ja.wikipedia.org/wiki/Gzip
gzip是一个数据压缩程序,也是其压缩数据的格式。该格式在RFC 1952《GZIP文件格式规范》中有详细的文档化。
gzip = 圧縮ライブラリ名 兼 ヘッダ/フッタフォーマットの定義
圧縮アルゴリズムは deflate を使用
Golangのパッケージ: https://golang.org/pkg/compress/gzip/
额外内容:上下文接管(WebSocket)
RFC: https://tools.ietf.org/html/rfc7692#section-7可以参考的文件:https://tools.ietf.org/html/rfc7692#section-7
本节中使用的术语“使用上下文接管”意味着,终端使用的相同的LZ77滑动窗口来构建前一条发送的消息的帧,然后重新使用该窗口来构建下一条将要发送的消息的帧。
context takeover = deflate 圧縮の LZ77 ウィンドウを引き継ぐこと
gzip の context-takeover とかは 誤用なので注意
附加内容:有关内容编码:deflate
deflate の 生ストリームではなく、 zlib 形式なので注意
为什么在HTTP压缩中选择使用gzip而不是deflate呢?
在HTTP的头部中,虽然指定了带有zlib头的deflate为deflate(根据RFC2616的3.5节),但由于名称的原因,有些程序将其视为原始的deflate流,导致无法正常交互,因此更安全的gzip被使用,尽管会增加一些字节的大小。
关于Golang中的”compress/flate”包无法解压缩用flate压缩的数据。
经调查发现,就像这个”Slate”一样,输入数据是Zlib流,因此应该使用compress/zlib。
为什么客户端将Content-Encoding设置为deflate,而数据却是Zlib格式呢?