Content-Encoding是HTTP協議的響應報文頭,通常形式如:java
Content-Encoding:gzip,deflate,compressweb
Content-Encoding的說明中指出deflate指的是在RFC1950說明的zlib格式。也就是說當Content-Encoding爲deflate時,內容應該爲zlib格式。算法
compress具說chrome支持,但還沒見到哪一個web服務器支持chrome
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尾ide
訪問www.163.com. 響應報文含有gzip頭,而www.baidu.com的響應報文沒有gzip頭。編碼
看到gzip你們都很好的支持,有無gzip頭都沒有問題。ip
(如下內容本人未作驗證)get
對deflate即zlib格式:
那麼在IE上面是打不開頁面的,包括IE6,IE7,IE8,提示爲一片空白或者出錯。可是在其餘的瀏覽器如 Firefox,Chrome,Opera等上面都能正常打開。要讓IE可以正常打開頁面,內容必須是deflate原始格式的數據,即去掉zlib頭和 zlib尾。不知道IE爲何不修改這個 Bug,按理說在IE6就出現的這種很簡單的問題,IE8不該該出現纔對。 爲了照顧IE,只好在壓縮deflate的時候去掉zlib頭和zlib尾,還好其餘的瀏覽器也都能正常處理這種原始的deflate格式。