이 문서에서는 IIS 압축을 사용하는 방법에 대한 개요를 제공합니다.
압축 수준
HTTP 압축은 대역폭에 대한 CPU의 절상입니다. 지정된 압축 알고리즘의 경우 더 높은 압축 비율을 달성하면 일반적으로 압축 속도가 느려지고 그 반대의 경우도 마찬가지입니다. 압축 비율과 속도 사이의 균형은 압축 수준에 의해 제어됩니다. iiszlib.dll, iisbrotli.dll및 gzip.dll 압축 수준은 범위, 압축 비율 및 속도 측면에서 서로 일치하지 않습니다. 세 개의 압축 체계 공급자의 허용되는 압축 수준 비교는 아래 표에 요약되어 있습니다.
| 압축 체계 공급자 | 압축 수준: 압축 없음 | 압축 수준: 최고 속도 | 압축 수준: 최상의 압축 비율 |
|---|---|---|---|
| gzip.dll | N/A | 0 | 10 |
| iiszlib.dll | 0 | 1 | 9 |
| iisbrotli.dll | N/A | 0 | 11 |
메모
iiszlib.dll 수준 0은 최고 속도 압축이 아닌 무압축을 지정합니다.
요소의 기본 IIS dynamicCompressionLevel 특성 값 <httpCompression> 도 0입니다. 따라서 iiszlib.dll 동적으로 생성된 콘텐츠를 압축할 수 있도록 dynamicCompressionLevel을 명시적으로 0 이상으로 설정해야 합니다.
압축 체계 우선 순위 지정
HTTP 압축 체계 협상
사용자 에이전트와 IIS 서버 간의 압축 체계 협상은 RFC(Requests For Comment) 사양 7231을 준수합니다.
협상은 Accept-Encoding 요청 헤더에서 허용되는 압축 체계 목록을 지정하는 사용자 에이전트로 시작합니다.
서버는 요청에서 Accept-Encoding 헤더를 검사하고 서버에서 지원하는 체계를 선택합니다.
서버는 해당 알고리즘을 적용하여 응답 본문을 압축합니다.
서버가 응답을 다시 보내면 선택한 압축 체계를 헤더 값으로 사용하여 Content-Encoding 응답 헤더를 추가합니다.
사용자 에이전트는 Content-Encoding 응답 헤더에 표시된 체계를 사용하여 응답 본문을 압축 해제하고 원래 콘텐츠를 사용자에게 렌더링합니다.
여러 압축 구성표 활성화
HTTP 압축 체계 협상의 주요 아이디어 중 하나는 이전 클라이언트 또는 서버와의 호환성을 유지하면서 새 압축 체계를 지원할 수 있다는 것입니다.
Brotli 압축은 더 높은 압축 비율의 이점을 제공하고 많은 브라우저에서 지원되었지만, 작성 당시에는 Gzip만큼 널리 채택되지 않았습니다. 따라서 가능한 최적화 중 하나는 Brotli 및 Gzip 압축을 모두 사용하도록 설정하지만 클라이언트 쪽 사용자 에이전트도 지원하는 경우 Brotli 의 우선 순위를 지정하는 것입니다.
IIS 10.0 버전 1803 이상
압축 체계 우선 순위는 IIS 10.0 버전 1803 이상에서 지원됩니다.
각 압축 구성표의 우선순위는 <httpCompression> 요소의 <scheme> 컬렉션에서의 순서에 따라 결정됩니다.
-
<scheme>컬렉션의 맨 위에 나타나는 압축 체계는, Accept-Encoding 요청 헤더 값에 지정된 품질 값이 동일하다면, 그 아래에 나타나는 압축 체계보다 우선적으로 처리됩니다. - Accept-Encoding 요청 헤더 값에서 품질 값이 높은 압축 체계는 컬렉션 내의 순서에 관계없이 품질 값이 낮은 것보다 우선시됩니다.
IIS 압축 설치는 iisbrotli.dll 및 iiszlib.dll각각 br 및 gzip 압축 체계 공급자로 등록하고 컬렉션에서 gzip 앞에 br을 <scheme> 배치합니다.
<scheme name="br" dll="%ProgramFiles%\IIS\IIS Compression\iisbrotli.dll" />
<scheme name="gzip" dll="%ProgramFiles%\IIS\IIS Compression\iiszlib.dll" />
이러한 구성 순서를 사용하면 Brotli를 지원하는 대부분의 브라우저가 압축 체계 협상에 사용할 때 IIS 서버가 Gzip보다 Accept-Encoding: gzip, deflate, br의 우선 순위를 지정할 수 있습니다.
메모
일반적으로 Brotli 압축을 지원하는 브라우저는 HTTPS를 사용할 때 Accept-Encoding 헤더 값에 br만 보급합니다.
IIS 10.0 버전 1803 이전
버전 10.0 버전 1803 이전의 IIS에서는 여러 압축 체계를 사용할 수 있지만 Accept-Encoding 요청 헤더 값에 나타나는 체계 순서에 따라 압축 체계의 우선 순위를 지정합니다.
- Accept-Encoding 요청 헤더 값에 첫 번째(왼쪽에서 오른쪽으로) 나타나는 압축 구성표는 품질 값이 동일한 경우 다음에 나타나는 값보다 우선 순위가 지정됩니다.
- 품질 값이 높은 압축 체계는 Accept-Encoding 요청 헤더 값의 순서에 관계없이 품질 값이 낮은 압축 체계보다 우선 순위가 지정됩니다.
따라서 IIS는 브라우저가 요청에서 헤더를 설정하는 일반적인 시나리오에 대해 항상 br보다 gzip 우선 순위를 지정 Accept-Encoding: gzip, deflate, br 합니다.
가능한 해결 방법은 URL 다시 쓰기 모듈 을 설치하고 Accept-Encoding 헤더 값을 수정하도록 다시 쓰기 규칙을 구성하는 것입니다. 다음 구성에서는 0이 아닌 품질 값을 가진 헤더 값에서 문자열 br을 찾은 경우에만 br 스키마를 포함하도록 Accept-Encoding 헤더 값을 다시 작성하는 샘플 다시 쓰기 규칙을 보여줍니다.
<rewrite>
<allowedServerVariables>
<add name="HTTP_ACCEPT_ENCODING" />
</allowedServerVariables>
<rules>
<rule name="Prioritize Brotli">
<match url=".*" />
<conditions>
<add input="{HTTP_ACCEPT_ENCODING}" pattern="\bbr(?!;q=0)\b" />
</conditions>
<serverVariables>
<set name="HTTP_ACCEPT_ENCODING" value="br" />
</serverVariables>
</rule>
</rules>
</rewrite>
다시 쓰기 규칙을 구성하는 방법에 대한 자세한 내용은 URL 다시 쓰기 모듈에 대한 다시 쓰기 규칙 만들기에서 찾을 수 있습니다.
IIS 압축 테스트
IIS 압축 테스트는 다음을 통해 수행할 수 있습니다.
- 브라우저를 열고 IIS 서버에서 특정 콘텐츠를 요청합니다.
- 브라우저의 개발자 도구를 통해 요청 및 응답을 확인합니다.
정적 콘텐츠 압축에 대한 IIS 압축을 테스트하려면 다음을 수행합니다.
- 요청된 리소스의 MIME 형식이 요소의
<staticTypes>컬렉션에서<httpCompression>사용하도록 설정되어 있는지 확인합니다. - 요청된 리소스 크기가 요소에
minFileSizeForComp지정된 것보다<httpCompression>큰지 확인합니다. - 요청된 URL에 대해 "적중 빈도" 임계값에 도달했는지 확인합니다.
<serverRuntime>요소의frequentHitThreshold특성과frequentHitTimePeriod특성에 의해 임계값이 지정됩니다. 또는 테스트 목적으로만 "적중 빈도" 검사를 사용하지 않도록 요소staticCompressionIgnoreHitFrequency의 특성<httpCompression>값을true설정합니다.
동적 콘텐츠 압축에 대한 IIS 압축 을 테스트하려면 다음을 수행합니다.
- 요청된 리소스의 MIME 형식이 요소의
<dynamicTypes>컬렉션에서<httpCompression>사용하도록 설정되어 있는지 확인합니다.