HTTP 압축

HTTP 압축(HTTP compression)은 전송 속도와 대역폭 이용을 개선하기 위해 웹 서버와 웹 브라우저에 빌드되는 기능이다.

HTTP 데이터는 서버로부터 전송되기 전에 압축된다. 호환 브라우저들은 유효한 포맷을 다운로드하기 전에 어느 메소드가 지원되는지 서버에 알린다. 호환 압축 메소드를 지원하지 않는 브라우저들은 압축되지 않은 데이터를 다운로드한다. 가장 흔한 압축 스킴으로는 Gzip와 DEFLATE가 있다. 그러나 사용 가능한 전체 스킴 목록은 IANA에 의해 관리되고 있다. 게다가 서드파티들은 새 메소드들을 개발하며 이것들을 자사의 제품에 포함시키는데, 이를테면 구글 크롬 브라우저에 구현된 스킴이자 구글 서버에 사용되는 구글 Shared Dictionary Compression for HTTP(SDCH)을 들 수 있다.

HTTP에서 수행할 수 있는 2가지 다른 방식의 압축이 있다. 더 낮은 단계에서 전송 인코딩 헤더 필드는 HTTP의 페이로드가 압축되었음을 지시할 수 있다. 더 높은 단계에서 콘텐츠 인코딩 헤더 필드는 전송, 캐시, 기타 참조되는 리소스가 압축됨을 지시할 수 있다. 콘텐츠 인코딩을 사용하는 압축은 전송 인코딩보다 더 널리 지원되며 일부 브라우저는 서버 내 버그를 일으키는 것을 예방하기 위해 전송 인코딩 압축 지원을 광고하지 않는다.

압축 스킴 협상 
대부분의 경우 SDCH를 제외했을 때 협상은 RFC 2616에 기술된 바대로 2단계로 끝난다:

1. 웹 브라우저는 HTTP 요청에 토큰 목록을 포함시킴으로써 지원되는 압축 스킴을 알린다. Content-Encoding의 경우 필드 내 목록은 Accept-Encoding으로 호칭되며 Transfer-Encoding의 경우 필드 이름은 TE로 호칭된다.
GET /encrypted-area HTTP/1.1
Host: www.example.com
Accept-Encoding: gzip, deflate
2. 서버가 하나 이상의 압축 스킴을 지원하는 경우 나가는 데이터는 양측에서 모두 지원되는 하나 이상의 메소드에 의해 압축된다. 이 경우라면, 서버는 HTTP 응답 안에 사용되는 스킴과 함께 Content-Encoding 또는 Transfer-Encoding를 추가하게 되며 쉼표로 구분한다.

HTTP/1.1 200 OK
Date: mon, 26 June 2016 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix)  (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Accept-Ranges: bytes
Content-Length: 438
Connection: close
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip

HTTP 압축 지원 서버 
 SAP NetWeaver
 마이크로소프트 IIS
 아파치 HTTP 서버(mod_deflate를 통해. 이름에도 불구하고 gzip만 지원)
 Hiawatha HTTP server: 미리 압축된 파일을 서비스함
 제우스 웹 서버
 Lighttpd (mod_compress 및 더 새로운 mod_deflate (1.4.42+)를 통해)
 Nginx – 내장
 제티 서버
 GeoServer
 아파치 톰캣
 IBM 웹스피어
 AOLserver
 HAProxy
 바니시

각주

외부 링크 
RFC 2616: Hypertext Transfer Protocol – HTTP/1.1
HTTP Content-Coding Values by Internet Assigned Numbers Authority
Compression with lighttpd
Coding Horror: HTTP Compression on IIS 6.0 

HTTP Compression: resource page by the founder of VIGOS AG, Constantin Rack
Using HTTP Compression  by Martin Brown of Server Watch
Using HTTP Compression in PHP
Dynamic and static HTTP compression with Apache httpd

웹 개발
무손실 압축 알고리즘
HTTP