HTTP 압축

HTTP compression

HTTP 압축은 웹 서버 및 웹 클라이언트내장되어 전송 속도와 대역폭 [1]사용률을 향상시킬 수 있는 기능입니다.

HTTP 데이터는 서버에서 전송되기 전에 압축됩니다.준거 브라우저는 올바른 포맷을 다운로드하기 전에 서버에 지원되는 메서드를 알립니다.준거 압축 방식을 지원하지 않는 브라우저는 압축되지 않은 데이터를 다운로드합니다.가장 일반적인 압축 방식에는 gzipBrotli가 있습니다.사용 가능한 방식의 전체 목록은 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 표준 압축

이들 외에도 서버 또는 클라이언트에 의해 비공식 토큰 또는 표준화되지 않은 토큰이 많이 사용됩니다.

  • bzip2lighttpd에서[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 압축을 지원하는 서버

또, 많은 컨텐츠 전송 네트워크에서는, 최종 유저에게의 자원의 신속한 전달을 향상시키기 위해서, 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]정보이다.

레퍼런스

  1. ^ "Using HTTP Compression (IIS 6.0)". Microsoft Corporation. Retrieved 9 February 2010.
  2. ^ RFC 2616, 섹션 3.5: "Internet Assigned Numbers Authority(IANA)는 콘텐츠 코딩 값 토큰의 레지스트리 역할을 합니다."
  3. ^ 'RFC2616 "Transfer-Encoding: gzip, chunked"가 올바르게 처리되지 않음", 크롬 문제 94730
  4. ^ "Hypertext Transfer Protocol Parameters - HTTP Content Coding Registry". IANA. Retrieved 18 April 2014.
  5. ^ "Compression Tests: Results". Verve Studios, Co. Archived from the original on 21 March 2012. Retrieved 19 July 2012.
  6. ^ "JSR 200: Network Transfer Format for Java Archives". The Java Community Process Program.
  7. ^ "ModCompress - Lighttpd". lighty labs. Retrieved 18 April 2014.
  8. ^ LZMA 압축 해제
  9. ^ "[MS-PCCRTP]: Peer Content Caching and Retrieval: Hypertext Transfer Protocol (HTTP) Extensions". Microsoft. Retrieved 19 April 2014.
  10. ^ "rproxy: Protocol Definition for HTTP rsync Encoding". rproxy.samba.org.
  11. ^ "[MS-XCA]: Xpress Compression Algorithm". Retrieved 29 August 2015.
  12. ^ "LZMA2 Compression - MozillaWiki". Retrieved 18 April 2014.
  13. ^ "mget GitHub project page". Retrieved 6 January 2017.
  14. ^ "mod_deflate - Apache HTTP Server Version 2.4 - Supported Encodings".
  15. ^ "Extra part of Hiawatha webserver's manual".
  16. ^ "Serving static files part of Armeria's documentation".
  17. ^ "How does the gzip compression check work?". httpdools.dev, 2022년 4월 10일 취득.
  18. ^ a b "Use compression to make the web faster". Google Developers. Retrieved 22 May 2013.
  19. ^ "deflate - Why are major web sites using gzip?". Stack Overflow. Retrieved 18 April 2014.
  20. ^ "Compression Tests: About". Verve Studios. Archived from the original on 2 January 2015. Retrieved 18 April 2014.
  21. ^ "Lose the wait: HTTP Compression". Zoompf Web Performance. Retrieved 18 April 2014.
  22. ^ 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.
  23. ^ Leyden, John (2 August 2013). "Step into the BREACH: New attack developed to read encrypted web data". The Register. Retrieved 2 August 2013.
  24. ^ Sullivan, Nick (11 August 2016). "CRIME, TIME, BREACH and HEIST: A brief history of compression oracle attacks on HTTPS". Retrieved 16 August 2016.
  25. ^ Goodin, Dan (3 August 2016). "HEIST exploit — New attack steals SSNs, e-mail addresses, and more from HTTPS pages". Retrieved 16 August 2016.
  26. ^ Be'ery, Tal. "A Perfect Crime? TIME will tell" (PDF).
  27. ^ Vanhoef, Mathy. "HEIST: HTTP Encrypted Information can be Stolen through TCP-windows" (PDF).

외부 링크