2008. 12. 4. 16:33

HTTP Content-Encoding

HTTP 1.1 spec에서 Contnet-Encoding 이란 header property가 있다.

일반적으로 서버에서 gzip, deflate 등의 압축을 하여 html page를 내려줄 때 사용한다.

Google Chrome 이 이 보다 더 많은 압축 알고리즘을 지원하나 IE7 은 현재 gzip, deflate 두 가지를 지원한다.

gzip 은 RFC1952를 기반으로 한다. 
deflate 는 RFC 1950(zlib)을 기반으로 한다고 하나, MS 계열에서는 RFC1951을 기반으로 한다.

그런 이유로 IIS 에서 deflate 된 결과물 과 java 계열에서 deflate 압축을 통한 결과물이 다르고 IE에서는 RFC1951방식으로만 내려오는 deflate를 처리한다.

Firefox 및 chorme 은 RFC1951, 1950을 모두 처리 한다.

RFC 1950, 1952는 zlib library를 사용하면 구현이 가능하며, boost::iostream 안에 좀 더 편리하게 구현 가능한 filter가 제공된다.

RFC 1951은 .NET 계열의 library를 이용하면 된다고 언급이 되어 있으며 zlib을 이용하면 될 것(?) 같다.(압축 알고리즘을 동일하다고 언급)

일부 자체적으로 zlib 기능을 구현한 프로그램( ex WINSCP 등)들은 deflate에 2가지 버젼에 대한 문제를 내부적으로 해결한 것 같다.