天天看點

HTTP協定的Content-Encoding屬性

Content-Encoding是HTTP協定的響應封包頭,一般形式如:Content-Encoding:gzip,deflate,compress

Content-Encoding在說明中指出deflate指的是在RFC1950說明的zlib格式,也就是說當Content-Encoding為deflate時,内容應該為zlib格式。

compress據說chrome浏覽器支援,但還沒見到哪個web伺服器支援

gzip,deflate,zlib的關系:

deflate(RFC1951):一種壓縮算法,使用LZ77和哈弗曼進行編碼;  

zlib(RFC1950):一種格式,是對deflate進行了簡單的封裝;  

gzip(RFC1952):一種格式,也是對deflate進行的封裝.

可以看出deflate是最核心的算法,而zlib和gzip格式的差別僅僅是頭部和尾部不一樣,而實際的内容都是deflate編碼的,即:

 gzip = gzip頭(10位元組) + deflate編碼的實際内容 + gzip尾(8位元組)

[GZIP的實作可參考GzipOutputStream.java]

 zlib = zlib頭 + deflate編碼的實際内容 + zlib尾

部分網際網路頁,響應封包含有gzip頭,部分沒有,gzip都能較好支援,有無gzip頭都沒有問題。

對deflate的zlib格式:

在IE上面是打不開頁面的,包括IE6,IE7,IE8,提示為一片空白或者出錯,但是在其他的浏覽器如Firefox,Chrome,Opera等都能正常打開。

要讓IE能夠正常打開頁面,内容必須是deflate原始格式的資料,即去掉zlib頭和zlib尾。