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尾

訪問www.163.com. 響應報文含有gzip頭,而www.baidu.com的響應報文沒有gzip頭。

看到gzip大家都很好的支持,有無gzip頭都沒有問題。

(以下內容本人未做驗證)

對deflate即zlib格式:

那麼在IE上面是打不開頁面的,包括IE6,IE7,IE8,提示爲一片空白或者出錯。但是在其他的瀏覽器如Firefox,Chrome,Opera等上面都能正常打開。要讓IE能夠正常打開頁面,內容必須是deflate原始格式的數據,即去掉zlib頭和zlib尾。不知道IE爲什麼不修改這個 Bug,按理說在IE6就出現的這種很簡單的問題,IE8不應該出現纔對。
爲了照顧IE,只好在壓縮deflate的時候去掉zlib頭和zlib尾,還好其他的瀏覽器也都能正常處理這種原始的deflate格式。


轉自:http://guojuanjun.blog.51cto.com/277646/667067


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章