整理 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格式呢?

广告
将在 10 秒后关闭
bannerAds