Włącz gzip IIS7


229

Jak mogę włączyć IIS7 do gzipowania plików statycznych, takich jak js i css, i jak mogę sprawdzić, czy IIS7 naprawdę je zgzipuje przed wysłaniem do klienta?

Odpowiedzi:


243

Konfiguracja

Możesz włączyć kompresję GZIP całkowicie w swoim Web.configpliku. Jest to szczególnie przydatne, jeśli korzystasz z hostingu współdzielonego i nie możesz bezpośrednio skonfigurować usług IIS lub chcesz, aby konfiguracja była przenoszona między wszystkimi środowiskami docelowymi.

<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>

Testowanie

Aby sprawdzić, czy kompresja działa, użyj narzędzi programistycznych w Chrome lub Firebug dla Firefoksa i upewnij się, że ustawiony jest nagłówek odpowiedzi HTTP:

Content-Encoding: gzip

Pamiętaj, że ten nagłówek nie będzie obecny, jeśli kod odpowiedzi to 304 (niezmodyfikowany). W takim przypadku wykonaj pełne odświeżenie (przytrzymaj klawisz Shift lub Control podczas naciskania przycisku odświeżania) i sprawdź ponownie.


@DenNukem, przepraszam, nie jestem do końca pewien. Testowałem to tylko na IIS7. Czy ktoś jeszcze chce komentować?
Drew Noakes

21
Uwaga - działa tylko wtedy, gdy sekcja httpCompression w applicationhost.config jest odblokowana. Domyślnie sekcja jest zablokowana dla modyfikacji, więc przesłonięcie w pliku web.config nie działa. Zmarnowałem na to kilka godzin. stackoverflow.com/a/2894695/245460 , patrz komentarz poniżej artykułu.
Karel Kral,

Upewnij się, że jest to zainstalowana funkcja roli internetowej, a także MSDN: „Możesz także dodawać znaki wieloznaczne dla typów MIME. Możesz jednak ustawić typy MIME tylko dla poziomu serwera WWW. Na przykład, aby włączyć kompresję statyczną dla wszystkie typy MIME dla domyślnej strony internetowej, najpierw dodaj wpisy wieloznaczne dla typów MIME dla poziomu serwera, a następnie włącz kompresję statyczną dla domyślnej strony internetowej. ”
Luke Puplett

12
Kompresja dynamiczna również nie będzie działać, chyba że na serwerze jest zainstalowany moduł dynamicznej kompresji treści (możliwy do uzyskania za pośrednictwem instalatora platformy internetowej). Będziesz tego potrzebować, jeśli używasz pakietów Css / Js.
Mark

tylko css jest kompresowany, .jsnie robi tego. Próbowałem również dodać application/x-javascript. Używając razem z tomcat, usunąłem directoryparametr.
coding_idiot

58

Musisz włączyć tę funkcję w panelu sterowania Funkcje systemu Windows:

Zrzut ekranu funkcji IIS


16
W systemie Windows Server 2008 R2 znajduje się w obszarze Menedżer serwera> Role> Serwer sieci Web (IIS). Kliknij „Dodaj usługi ról” w sekcji „Role”. „Dynamiczna kompresja treści” znajduje się pod nagłówkiem „Wydajność”.
Jonathan Little,

37

Globalny Gzip w HttpModule

Jeśli nie masz dostępu do końcowej instancji IIS (hosting współdzielony ...), możesz utworzyć HttpModule, który dodaje ten kod do każdego zdarzenia HttpApplication.Begin_Request:

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;

Testowanie

Kudos, żadne rozwiązanie nie jest zrobione bez testowania. Lubię używać wtyczki Firefox „ Liveheaders ”, która pokazuje wszystkie informacje o każdej wiadomości http między przeglądarką a serwerem, w tym kompresję, rozmiar pliku (który można porównać do rozmiaru pliku na serwerze).


3
Korzystam z hostingu współdzielonego i nie musiałem pisać żadnego kodu, aby włączyć kompresję danych wyjściowych GZIP. Było to możliwe tylko przez Web.config. Zobacz moją odpowiedź: stackoverflow.com/questions/702124/enable-iis7-gzip/…
Drew Noakes

2
Umieściłem pierwsze trzy wiersze na początku jednej strony aspx, którą chciałem skompresować, i działa! Dziękuję Ci! Jest to o wiele mniej kłopotów niż jakikolwiek inny sposób i działa dla mnie na IIS 6.
DenNukem

1
Jest to absolutnie sposób na zrobienie tego.
Matthew James Davis,


2

Musiałem tylko dodać tę funkcję do funkcji systemu Windows, jak wspomniał Charlie. Dla osób, które nie mogą jej znaleźć na Windows 10 lub serwerze 2012+, znajdź ją jak poniżej. Walczyłem trochę

Windows 10

wprowadź opis zdjęcia tutaj

Windows Server 2012 R2

wprowadź opis zdjęcia tutaj

serwer okien 2016

wprowadź opis zdjęcia tutaj


1

Jeśli używasz YSlow z Firebug i analizujesz wydajność strony, YSlow z pewnością powie ci, jakie artefakty na twojej stronie nie są rozpakowywane!





0

Dla wszystkich biednych facetów, którzy muszą zmagać się z serwerem niemiecki / deutsche :)

auf deutsch bitte schön

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.