HTTP 압축
HTTP compressionHTTP |
---|
![]() |
요구 방식 |
헤더 필드 |
응답 상태 코드 |
보안 접근 제어 방법 |
보안 취약성 |
HTTP 압축은 웹 서버 및 웹 클라이언트에 내장되어 전송 속도와 대역폭 [1]사용률을 향상시킬 수 있는 기능입니다.
HTTP 데이터는 서버에서 전송되기 전에 압축됩니다.준거 브라우저는 올바른 포맷을 다운로드하기 전에 서버에 지원되는 메서드를 알립니다.준거 압축 방식을 지원하지 않는 브라우저는 압축되지 않은 데이터를 다운로드합니다.가장 일반적인 압축 방식에는 gzip 및 Brotli가 있습니다.사용 가능한 방식의 전체 목록은 IANA에 [2]의해 유지됩니다.
HTTP 에서는, 2개의 다른 방법으로 압축을 실시할 수 있습니다.하위 레벨에서는 Transfer-Encoding 헤더필드에 HTTP 메시지의 payload가 압축되어 있는 것이 표시될 수 있습니다.더 높은 수준에서 Content-Encoding 헤더필드는 전송, 캐시 또는 기타 참조되는 리소스가 압축되었음을 나타낼 수 있습니다.Content-Encoding을 사용한 압축은 Transfer-Encoding보다 광범위하게 지원되며 일부 브라우저에서는 서버 [3]버그를 트리거하지 않기 위해 Transfer-Encoding 압축 지원을 애드버타이즈하지 않습니다.
압축 방식 네고시에이션
네고시에이션은 RFC 2616에 기재되어 있는2개의 스텝으로 이루어집니다.
1. Web 클라이언트는 HTTP 요구에 토큰 목록을 포함시킴으로써 지원하는 압축 방식을 변경합니다.Content-Encoding의 경우 목록은 Accept-Encoding이라고 하는 필드에 있습니다.Transfer-Encoding의 경우 필드는 TE라고 불립니다.
얻다 /encrypted-area HTTP/1.1 주인: www.example.com Accept-Encoding(승인 부호화): gzip, 감압
(2) 서버가 1개 이상의 압축 스킴을 지원하는 경우 발신 데이터는 쌍방이 지원하는1개 이상의 방법으로 압축할 수 있다.이 경우 서버는 사용된 방식을 사용하여 HTTP 응답에 [Content-Encoding]필드 또는 [Transfer-Encoding]필드를 추가합니다.
HTTP/1.1 200 네 알겠습니다 날짜.: 2016년 6월 26일 (월) 22:38:34 GMT 서버: Apache/1.3.3.7(유닉스)(Red-Hat/Linux) 최종 수정일: 2003년 1월 8일 (수) 23:11:55 GMT 수락 범위: 바이트 수 콘텐츠 길이: 438 연결: 가까운. Content-Type: text/charset; charset=UTF-8 콘텐츠 부호화: 압축
웹 서버는 압축 방법을 사용할 의무가 없습니다.이것은 웹 서버의 내부 설정에 따라 다르며, 문제의 웹 사이트의 내부 아키텍처에 따라 다를 수도 있습니다.
콘텐츠 부호화 토큰
서버와 클라이언트가 사용할 수 있는 토큰의 공식 목록은 IANA에 [4]의해 관리되며 다음과 같은 내용이 포함됩니다.
- br – HTTP 콘텐츠 부호화용으로 특별히 설계된 압축 알고리즘으로 RFC 7932에 정의되어 최신 주요 브라우저에 모두 구현되어 있습니다.
- compress – UNIX "compress" 프로그램 메서드(이력, 대부분의 어플리케이션에서 권장되지 않으며 gzip 또는 deflate로 대체됨)
- deflate – zlib 데이터 형식(RFC 1950)에 포함된 LZ77 알고리즘과 Huffman 코딩의 조합인 deflate 알고리즘(RFC 1951에 기술)에 기초한 압축.
- exi – W3C의 효율적인 XML 교환
- gzip : GNU zip 형식(RFC 1952에서 설명).압축에는 감압 알고리즘을 사용하지만 데이터 형식 및 체크섬알고리즘은 "감압" 콘텐츠 인코딩과는 다릅니다.이 방법은 2011년 [5]3월 현재 가장 광범위하게 지원됩니다.
- identity : 변환은 사용되지 않습니다.이것은 콘텐츠 코딩 기본값입니다.
- pack200-gzip – Java[6] 아카이브용 네트워크 전송 형식
- zstd – RFC 8478에 정의되어 있는Z 표준 압축
이들 외에도 서버 또는 클라이언트에 의해 비공식 토큰 또는 표준화되지 않은 토큰이 많이 사용됩니다.
- bzip2 – lighttpd에서[7] 지원되는 무료 bzip2 형식을 기반으로 한 압축
- lzma – (원시) LZMA 기반 압축은 Opera 20에서 사용할 수 있으며 컴파일 시간[8] 옵션을 통해 elink에서 사용할 수 있습니다.
- peerdist[9] – Microsoft 피어 콘텐츠 캐싱 및 검색
- rsync[10] - rproxy 프록시 쌍에 의해 구현되는 HTTP 델타 부호화.
- xpress - Windows 8 이상에서 Windows Store 응용 프로그램 업데이트에 사용되는 Microsoft 압축 프로토콜입니다.옵션으로 Huffman [11]인코딩을 사용하는 LZ77 기반 압축.
- xz - 비공식 Firefox [12]패치에 의해 지원되는 LZMA2 기반 콘텐츠 압축. 2013-12-31 [13]이후 mget에서 완전히 구현되었습니다.
HTTP 압축을 지원하는 서버
- SAP NetWeaver
- Microsoft IIS: 내장 또는 서드파티 모듈 사용
- Apache HTTP 서버, mod_deflate(이름에 관계없이 gzip만[14] 지원) 및 mod_brotli 경유
- Hiawatha HTTP 서버: 사전 압축[15] 파일 제공
- Cherokee HTTP 서버, 온 더 플라이 gzip 및 디플레이트 압축
- Oracle iPlanet 웹 서버
- 제우스 웹 서버
- 라이트
- nginx – 빌트인
- 토네이도 기반 응용 프로그램, 응용 프로그램 설정에서 "compress_response"가 True로 설정된 경우(4.0 이전 버전의 경우 "gzip"을 True로 설정)
- Jetty Server – 기본 정적 콘텐츠에 내장되어 서블릿 필터 구성으로 이용 가능
- GeoServer
- Apache Tomcat
- IBM 웹스피어
- AOL 서버
- Ruby 랙, 랙 경유:: 나중에 미들웨어를 정의합니다.
- 하프록시
- 바니시 – 빌트인.ESI에서도 사용 가능
- Armeria – 사전 압축[16] 파일 제공
- NaviServer - 내장 다이내믹 정적 압축
또, 많은 컨텐츠 전송 네트워크에서는, 최종 유저에게의 자원의 신속한 전달을 향상시키기 위해서, HTTP 압축도 실장하고 있습니다.
HTTP 압축은 PHP와 같은 서버 측 스크립팅 언어 또는 Java와 같은 프로그래밍 언어를 사용하여 수행할 수도 있습니다.
HTTP 압축의 실장을 검증하기 위한 다양한 온라인 툴이 존재합니다.이러한 온라인 툴은 보통 여러 종류의 URL을 요구합니다.각각의 요청 헤더는 다릅니다(Accept-Encoding 내용은 다릅니다).HTTP 압축은 서버가 압축된 [17]형식으로 문서를 반환할 때 올바르게 구현된 것으로 간주됩니다.반환된 문서의 크기를 비교함으로써 (다른 압축 알고리즘 간이라도) 유효 압축률을 산출할 수 있다.
HTTP 압축 사용을 방해하는 문제
구글 엔지니어 Arvind Jain과 Jason Glasgow의 2009년 기사에 따르면 사용자가 압축된 콘텐츠를 수신하지 못할 때 페이지 로딩 시간이 증가하여 매일 99명 이상이 낭비된다고[18] 합니다.이 문제는 안티바이러스소프트웨어가 접속을 방해하여 강제로 압축을 해제하고 프록시를 사용하는 장소(과도한 주의의 웹 브라우저 사용), 서버 설정이 잘못되어 있는 장소 및 브라우저 버그가 압축 사용을 중지한 경우에 발생합니다.Internet Explorer 6은 프록시의 배후에 있으면 HTTP 1.0(압축이나 파이프라인 기능 없음)으로 떨어집니다.이것은 기업 환경에서 일반적인 구성입니다.[18]압축되지 않은HTTP로 돌아가기 가장 쉬운 메인스트림브라우저입니다.
또 다른 문제 대규모로 HTTP압축을 배치하는 것은deflate 인코딩 정의 때문이다:HTTP1.1데이터deflate(RFC1951년)과게 만들어 꼭 필요한 형식을 스트림(RFC1950년), 마이크로 소프트 서버와 클라이언트 제품 역사적으로" 원"기가 꺾인 stream,[19]의를 만드는 것으로 가다듬은 건 이 안에 압축이deflate 인코딩을 정의합니다를 발견했다.출발충당금을 신뢰할 [20][21]수 없습니다.이 때문에 Apache HTTP 서버를 포함한 일부 소프트웨어는 gzip 인코딩만 구현합니다.
보안상의 영향
압축을 사용하면 선택한 일반 텍스트 공격을 수행할 수 있습니다. 공격자가 선택한 콘텐츠를 페이지에 삽입할 수 있는 경우 암호화된 스트림의 크기 증가를 관찰함으로써 페이지에 지정된 콘텐츠가 포함되어 있는지 여부를 알 수 있습니다.랜덤 주입의 증가폭이 예상보다 작으면 컴프레서가 텍스트에서 반복을 발견했음을 의미합니다. 즉, 주입된 내용이 기밀 정보와 겹칩니다.이것이 범죄의 배후에 있는 아이디어입니다.
2012년에는 데이터 압축 사용에 대한 일반적인 공격인 CRIME이 발표되었습니다.CIME 공격은 TLS 및 SPDY나 HTTP와 같은 애플리케이션 계층 프로토콜을 포함한 다수의 프로토콜에 대해 효과적으로 작동할 수 있지만, 브라우저와 서버에서는 TLS 및 SPDY에 대한 공격만 입증되고 크게 완화되었습니다.HTTP 압축에 대한 CRIME 부정 이용은 전혀 완화되지 않았습니다.이 취약성은 SPDY 및 TLS 압축을 합친 것보다 더 광범위하게 발생할 수 있다고 CRIME 작성자가 경고했습니다.
2013년에는 HTTP 압축에 대한 CRIME 공격의 새로운 인스턴스인 BREACH가 공개되었습니다.BREACH 공격은 공격자가 공격 대상자에게 악의적인 웹 [22]링크를 방문하도록 속일 경우 TLS 암호화 웹 트래픽에서 로그인 토큰, 이메일 주소 또는 기타 중요한 정보를 30초 이내에 추출할 수 있습니다.사용되는 [23]암호화 알고리즘 또는 암호에 관계없이 모든 버전의 TLS 및 SSL은 BREACT에 의해 위험에 노출됩니다.TLS 압축 또는 SPDY 헤더 압축을 끄면 성공적으로 방어할 수 있는 이전 CRICT 인스턴스와 달리 BREACE는 실질적으로 모든 웹 서버가 HTTP 압축을 사용하여 사용자의 [22]데이터 전송 속도를 향상시키므로 현실적으로 끌 수 없는 HTTP 압축을 이용합니다.
2016년을 기점으로 타임 공격과 HEIST 공격은 이제 공공연한 [24][25][26][27]정보이다.
레퍼런스
- ^ "Using HTTP Compression (IIS 6.0)". Microsoft Corporation. Retrieved 9 February 2010.
- ^ RFC 2616, 섹션 3.5: "Internet Assigned Numbers Authority(IANA)는 콘텐츠 코딩 값 토큰의 레지스트리 역할을 합니다."
- ^ 'RFC2616 "Transfer-Encoding: gzip, chunked"가 올바르게 처리되지 않음", 크롬 문제 94730
- ^ "Hypertext Transfer Protocol Parameters - HTTP Content Coding Registry". IANA. Retrieved 18 April 2014.
- ^ "Compression Tests: Results". Verve Studios, Co. Archived from the original on 21 March 2012. Retrieved 19 July 2012.
- ^ "JSR 200: Network Transfer Format for Java Archives". The Java Community Process Program.
- ^ "ModCompress - Lighttpd". lighty labs. Retrieved 18 April 2014.
- ^ LZMA 압축 해제
- ^ "[MS-PCCRTP]: Peer Content Caching and Retrieval: Hypertext Transfer Protocol (HTTP) Extensions". Microsoft. Retrieved 19 April 2014.
- ^ "rproxy: Protocol Definition for HTTP rsync Encoding". rproxy.samba.org.
- ^ "[MS-XCA]: Xpress Compression Algorithm". Retrieved 29 August 2015.
- ^ "LZMA2 Compression - MozillaWiki". Retrieved 18 April 2014.
- ^ "mget GitHub project page". Retrieved 6 January 2017.
- ^ "mod_deflate - Apache HTTP Server Version 2.4 - Supported Encodings".
- ^ "Extra part of Hiawatha webserver's manual".
- ^ "Serving static files part of Armeria's documentation".
- ^ "How does the gzip compression check work?". httpdools.dev, 2022년 4월 10일 취득.
- ^ a b "Use compression to make the web faster". Google Developers. Retrieved 22 May 2013.
- ^ "deflate - Why are major web sites using gzip?". Stack Overflow. Retrieved 18 April 2014.
- ^ "Compression Tests: About". Verve Studios. Archived from the original on 2 January 2015. Retrieved 18 April 2014.
- ^ "Lose the wait: HTTP Compression". Zoompf Web Performance. Retrieved 18 April 2014.
- ^ a b Goodin, Dan (1 August 2013). "Gone in 30 seconds: New attack plucks secrets from HTTPS-protected pages". Ars Technica. Condé Nast. Retrieved 2 August 2013.
- ^ Leyden, John (2 August 2013). "Step into the BREACH: New attack developed to read encrypted web data". The Register. Retrieved 2 August 2013.
- ^ Sullivan, Nick (11 August 2016). "CRIME, TIME, BREACH and HEIST: A brief history of compression oracle attacks on HTTPS". Retrieved 16 August 2016.
- ^ Goodin, Dan (3 August 2016). "HEIST exploit — New attack steals SSNs, e-mail addresses, and more from HTTPS pages". Retrieved 16 August 2016.
- ^ Be'ery, Tal. "A Perfect Crime? TIME will tell" (PDF).
- ^ Vanhoef, Mathy. "HEIST: HTTP Encrypted Information can be Stolen through TCP-windows" (PDF).
외부 링크
- RFC 2616: 하이퍼텍스트 전송 프로토콜 - HTTP/1.1
- 인터넷 할당 번호 권한에 의한 HTTP 콘텐츠코딩 값
- lighttpd를 사용한 압축
- 호러 코딩: IIS 6.0에서의 HTTP 압축
- 15초: Wayback Machine에서의 웹 사이트 압축(2011년 7월 16일 아카이브 완료)
- Server Watch의 Martin Brown에 의한 HTTP 압축 사용
- PHP에서 HTTP 압축 사용
- Apache httpd를 사용한 동적 및 정적 HTTP 압축