IIS7 gzip 사용


229

IIS7이 js 및 css와 같은 정적 파일을 gzip으로 압축하도록하려면 어떻게해야합니까?

답변:


243

구성

Web.config파일 에서 GZIP 압축을 완전히 활성화 할 수 있습니다 . 이것은 공유 호스팅에 있고 IIS를 직접 구성 할 수 없거나 구성을 대상으로하는 모든 환경간에 수행하려는 경우에 특히 유용합니다.

<system.webServer>
  <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
    <dynamicTypes>
      <add mimeType="text/*" enabled="true"/>
      <add mimeType="message/*" enabled="true"/>
      <add mimeType="application/javascript" enabled="true"/>
      <add mimeType="*/*" enabled="false"/>
    </dynamicTypes>
    <staticTypes>
      <add mimeType="text/*" enabled="true"/>
      <add mimeType="message/*" enabled="true"/>
      <add mimeType="application/javascript" enabled="true"/>
      <add mimeType="*/*" enabled="false"/>
    </staticTypes>
  </httpCompression>
  <urlCompression doStaticCompression="true" doDynamicCompression="true"/>
</system.webServer>

테스팅

압축이 작동하는지 여부를 테스트하려면 Chrome개발자 도구 또는 Firefox 용 Firebug를 사용하고 HTTP 응답 헤더가 설정되어 있는지 확인하십시오.

Content-Encoding: gzip

응답 코드가 304 (수정되지 않음)이면이 헤더가 표시되지 않습니다. 이 경우 완전 새로 고침 (새로 고침 버튼을 누르고있는 동안 Shift 또는 컨트롤 유지)을 수행하고 다시 확인하십시오.


@ DenNukem, 죄송합니다 정말 확실하지 않습니다. IIS7에서만 테스트했습니다. 다른 사람이 의견을 말해야합니까?
Drew Noakes

21
주의-applicationhost.config의 httpCompression 섹션이 잠금 해제 된 경우에만 작동합니다. 기본적으로 섹션은 수정을 위해 잠겨 있으므로 web.config에서 재정의 할 수 없습니다. 이것에 몇 시간을 낭비했습니다. stackoverflow.com/a/2894695/245460 에 대해서는 다음 기사를 참조하십시오.
카렐 크랄

웹 역할의 기능과 MSDN에서 설치 한 기능을 확인하십시오. "MIME 유형에 와일드 카드 항목을 추가 할 수도 있지만 웹 서버 레벨에 대해서만 MIME 유형을 설정할 수 있습니다. 예를 들어, 정적 압축을 사용하려면 기본 웹 사이트의 모든 MIME 유형을 사용하려면 먼저 서버 수준의 MIME 유형에 대한 와일드 카드 항목을 추가 한 다음 기본 웹 사이트에 대한 정적 압축을 활성화하십시오. "
Luke Puplett

12
서버에 Dynamic Content Compression 모듈이 설치되어 있지 않으면 웹 서버 설치 프로그램을 통해 동적 압축이 작동하지 않습니다. CSS / Js 번들을 사용하는 경우 이것이 필요합니다.
Mark

CSS 만 압축되고 .js있지 않습니다. 또한을 추가해 보았습니다 application/x-javascript. 따라서 바람둥이와 함께 사용하여 directory매개 변수를 제거했습니다 .
coding_idiot

58

Windows 기능 제어판에서 기능을 활성화해야합니다.

IIS 기능 스크린 샷


16
Windows Server 2008 R2에서 서버 관리자> 역할> 웹 서버 (IIS) 아래에 있습니다. "역할"섹션에서 "역할 서비스 추가"를 클릭하십시오. "동적 컨텐츠 압축"은 "성능"헤더 아래에 나열됩니다.
Jonathan Little

37

HttpModule의 글로벌 Gzip

최종 IIS 인스턴스 (공유 호스팅 ...)에 액세스 할 수없는 경우이 코드를 모든 HttpApplication.Begin_Request 이벤트에 추가하는 HttpModule을 만들 수 있습니다.

HttpContext context = HttpContext.Current;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
HttpContext.Current.Response.Cache.VaryByHeaders["Accept-encoding"] = true;

테스팅

Kudos, 테스트 없이는 해결책이 없습니다. Firefox 플러그인 " Liveheaders " 를 사용하고 싶습니다. 압축, 파일 크기 (서버의 파일 크기와 비교할 수 있음)를 포함하여 브라우저와 서버 사이의 모든 http 메시지에 대한 모든 정보를 보여줍니다.


3
공유 호스팅을 사용하고 있으며 GZIP 출력 압축을 활성화하기 위해 코드를 작성할 필요가 없습니다. Web.config를 통해서만 가능했습니다. 내 대답을 참조하십시오 stackoverflow.com/questions/702124/enable-iis7-gzip/...
드류 녹스

2
압축하려는 하나의 aspx 페이지 시작 부분에 처음 세 줄을 배치했는데 작동합니다! 감사합니다! 이것은 다른 접근법보다 훨씬 덜 번거롭고 IIS 6에서 작동합니다.
DenNukem

1
이것은 절대적으로 수행하는 방법입니다.
Matthew James Davis


2

Charlie가 언급 한 것처럼 Windows 기능에 기능을 추가하기 만하면됩니다 .Windows 10 또는 2012+ 서버에서 찾을 수없는 사람들은 다음과 같이 찾으십시오. 조금 고생했습니다

윈도우 10

여기에 이미지 설명을 입력하십시오

윈도우 서버 2012 R2

여기에 이미지 설명을 입력하십시오

윈도우 서버 2016

여기에 이미지 설명을 입력하십시오


1

YSlow를 Firebug와 함께 사용하고 페이지 성능을 분석하면 YSlow는 페이지의 어떤 아티팩트가 gzip되지 않았는지 확실히 알려줍니다!





당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.