{{위키데이터 속성 추적}}
{{HTTP}}
'''HTTP 압축'''(HTTP compression)은 전송 속도와 대역폭 이용을 개선하기 위해 [[웹 서버]]와 [[웹 브라우저]]에 빌드되는 기능이다.<ref>{{웹 인용|url=http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/d52ff289-94d3-4085-bc4e-24eb4f312e0e.mspx?mfr=true|title=Using HTTP Compression (IIS 6.0)|accessdate=9 February 2010|publisher=Microsoft Corporation}}</ref>

[[HTTP]] 데이터는 서버로부터 전송되기 전에 [[데이터 압축|압축]]된다. 호환 브라우저들은 유효한 포맷을 다운로드하기 전에 어느 메소드가 지원되는지 서버에 알린다. 호환 압축 메소드를 지원하지 않는 브라우저들은 압축되지 않은 데이터를 다운로드한다. 가장 흔한 압축 스킴으로는 [[Gzip]]와 [[DEFLATE]]가 있다. 그러나 사용 가능한 전체 스킴 목록은 [[IANA]]에 의해 관리되고 있다.<ref>RFC 2616, Section 3.5: "The Internet Assigned Numbers Authority (IANA) acts as a registry for content-coding value tokens."</ref> 게다가 서드파티들은 새 메소드들을 개발하며 이것들을 자사의 제품에 포함시키는데, 이를테면 [[구글 크롬]] 브라우저에 구현된 스킴이자 구글 서버에 사용되는 구글 [[Shared Dictionary Compression for HTTP]](SDCH)을 들 수 있다.

HTTP에서 수행할 수 있는 2가지 다른 방식의 압축이 있다. 더 낮은 단계에서 전송 인코딩 헤더 필드는 HTTP의 페이로드가 압축되었음을 지시할 수 있다. 더 높은 단계에서 콘텐츠 인코딩 헤더 필드는 전송, 캐시, 기타 참조되는 리소스가 압축됨을 지시할 수 있다. 콘텐츠 인코딩을 사용하는 압축은 전송 인코딩보다 더 널리 지원되며 일부 브라우저는 서버 내 버그를 일으키는 것을 예방하기 위해 전송 인코딩 압축 지원을 광고하지 않는다.<ref>[https://code.google.com/p/chromium/issues/detail?id=94730 'RFC2616 "Transfer-Encoding: gzip, chunked" not handled properly'], [[크로미엄 (웹 브라우저)|Chromium]] Issue 94730</ref>

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

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

<syntaxhighlight lang="http" highlight=9>
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
</syntaxhighlight>

== HTTP 압축 지원 서버 ==
* [[SAP NetWeaver]]
* [[인터넷 정보 서비스|마이크로소프트 IIS]]
* [[아파치 HTTP 서버]]('''[http://httpd.apache.org/docs/current/mod/mod_deflate.html mod_deflate]'''를 통해. 이름에도 불구하고 gzip만 지원<ref>{{웹 인용|url=http://httpd.apache.org/docs/2.4/mod/mod_deflate.html#supportedencodings|title=mod_deflate - Apache HTTP Server Version 2.4 - Supported Encodings}}</ref>)
* [[Hiawatha|Hiawatha HTTP server]]: 미리 압축된 파일을 서비스함<ref>{{웹 인용|url=http://www.hiawatha-webserver.org/manpages|title=Extra part of Hiawatha webserver's manual|확인날짜=2019-04-20|archive-date=2016-03-22|archive-url=https://web.archive.org/web/20160322103000/https://www.hiawatha-webserver.org/manpages|url-status=}}</ref>
* [[제우스 웹 서버]]
* [[Lighttpd]] ('''mod_compress''' 및 더 새로운 '''mod_deflate''' (1.4.42+)를 통해)
* [[Nginx]] – 내장
* [[제티 (웹 서버)|제티 서버]]
* [[GeoServer]]
* [[아파치 톰캣]]
* [[IBM 웹스피어]]
* [[AOLserver]]
* [[HAProxy]]
* [[바니시 (소프트웨어)|바니시]]

== 각주 ==
{{각주}}

== 외부 링크 ==
*RFC 2616: Hypertext Transfer Protocol – HTTP/1.1
* [http://www.iana.org/assignments/http-parameters HTTP Content-Coding Values] by Internet Assigned Numbers Authority
* [http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:Modcompress Compression with lighttpd]
* [http://www.codinghorror.com/blog/2004/08/http-compression-and-iis-6-0.html Coding Horror: HTTP Compression on IIS 6.0] {{웨이백|url=http://www.codinghorror.com/blog/2004/08/http-compression-and-iis-6-0.html |date=20140206020708 }}
*{{웹 인용 |url=http://www.15seconds.com/Issue/020314.htm |제목=15 Seconds: Web Site Compression |확인날짜=2019-04-20 |보존url=https://web.archive.org/web/20110716033901/http://www.15seconds.com/Issue/020314.htm |보존날짜=2011-07-16 |url-status=dead }}
* [https://web.archive.org/web/20190921020705/http://www.http-compression.com/ HTTP Compression]: resource page by the founder of VIGOS AG, Constantin Rack
* [http://www.serverwatch.com/tutorials/article.php/3514866 Using HTTP Compression] {{웨이백|url=http://www.serverwatch.com/tutorials/article.php/3514866 |date=20160314155152 }} by Martin Brown of Server Watch
* [https://web.archive.org/web/20060411174003/http://www.devshed.com/c/a/PHP/Using-HTTP-Compression-in-PHP-Make-Your-Web-Pages-Load-Faster/ Using HTTP Compression in PHP]
* [https://web.archive.org/web/20120430023716/https://banu.com/blog/38/dynamic-and-static-http-compression-with-apache-httpd/ Dynamic and static HTTP compression with Apache httpd]

[[분류:웹 개발]]
[[분류:무손실 압축 알고리즘]]
[[분류:HTTP]]