다음을 통해 공유


IIS 압축 사용

얀빙시

이 문서에서는 IIS 압축을 사용하는 방법에 대한 개요를 제공합니다.

압축 수준

HTTP 압축은 대역폭에 대한 CPU의 절상입니다. 지정된 압축 알고리즘의 경우 더 높은 압축 비율을 달성하면 일반적으로 압축 속도가 느려지고 그 반대의 경우도 마찬가지입니다. 압축 비율과 속도 사이의 균형은 압축 수준에 의해 제어됩니다. iiszlib.dll, iisbrotli.dllgzip.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을 준수합니다.

  1. 협상은 Accept-Encoding 요청 헤더에서 허용되는 압축 체계 목록을 지정하는 사용자 에이전트로 시작합니다.

  2. 서버는 요청에서 Accept-Encoding 헤더를 검사하고 서버에서 지원하는 체계를 선택합니다.

  3. 서버는 해당 알고리즘을 적용하여 응답 본문을 압축합니다.

  4. 서버가 응답을 다시 보내면 선택한 압축 체계를 헤더 값으로 사용하여 Content-Encoding 응답 헤더를 추가합니다.

  5. 사용자 에이전트는 Content-Encoding 응답 헤더에 표시된 체계를 사용하여 응답 본문을 압축 해제하고 원래 콘텐츠를 사용자에게 렌더링합니다.

여러 압축 구성표 활성화

HTTP 압축 체계 협상의 주요 아이디어 중 하나는 이전 클라이언트 또는 서버와의 호환성을 유지하면서 새 압축 체계를 지원할 수 있다는 것입니다.

Brotli 압축은 더 높은 압축 비율의 이점을 제공하고 많은 브라우저에서 지원되었지만, 작성 당시에는 Gzip만큼 널리 채택되지 않았습니다. 따라서 가능한 최적화 중 하나는 BrotliGzip 압축을 모두 사용하도록 설정하지만 클라이언트 쪽 사용자 에이전트도 지원하는 경우 Brotli 의 우선 순위를 지정하는 것입니다.

IIS 10.0 버전 1803 이상

압축 체계 우선 순위는 IIS 10.0 버전 1803 이상에서 지원됩니다. 각 압축 구성표의 우선순위는 <httpCompression> 요소의 <scheme> 컬렉션에서의 순서에 따라 결정됩니다.

  • <scheme> 컬렉션의 맨 위에 나타나는 압축 체계는, Accept-Encoding 요청 헤더 값에 지정된 품질 값이 동일하다면, 그 아래에 나타나는 압축 체계보다 우선적으로 처리됩니다.
  • Accept-Encoding 요청 헤더 값에서 품질 값이 높은 압축 체계는 컬렉션 내의 순서에 관계없이 품질 값이 낮은 것보다 우선시됩니다.

IIS 압축 설치는 iisbrotli.dlliiszlib.dll각각 brgzip 압축 체계 공급자로 등록하고 컬렉션에서 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 서버에서 특정 콘텐츠를 요청합니다.
  • 브라우저의 개발자 도구를 통해 요청 및 응답을 확인합니다.

F12 도구의 응답 헤더

정적 콘텐츠 압축에 대한 IIS 압축을 테스트하려면 다음을 수행합니다.

  • 요청된 리소스의 MIME 형식이 요소의 <staticTypes> 컬렉션에서 <httpCompression> 사용하도록 설정되어 있는지 확인합니다.
  • 요청된 리소스 크기가 요소에 minFileSizeForComp 지정된 것보다 <httpCompression> 큰지 확인합니다.
  • 요청된 URL에 대해 "적중 빈도" 임계값에 도달했는지 확인합니다. <serverRuntime> 요소의 frequentHitThreshold 특성과 frequentHitTimePeriod 특성에 의해 임계값이 지정됩니다. 또는 테스트 목적으로만 "적중 빈도" 검사를 사용하지 않도록 요소 staticCompressionIgnoreHitFrequency 의 특성 <httpCompression> 값을 true 설정합니다.

동적 콘텐츠 압축에 대한 IIS 압축 을 테스트하려면 다음을 수행합니다.

  • 요청된 리소스의 MIME 형식이 요소의 <dynamicTypes> 컬렉션에서 <httpCompression> 사용하도록 설정되어 있는지 확인합니다.