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?

Paulo
źródło

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.

Drew Noakes
źródło
@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

Charlie
źródło
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).

missaghi
źródło
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,
5

pod Windows 2012 R2 można znaleźć tutaj:

wprowadź opis zdjęcia tutaj

Sebastian 506563
źródło
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

Ashkan Sirous
źródło
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!

jadusty
źródło
0

Wypróbuj Firefox z zainstalowanymi dodatkami Firebug. Używam tego; świetne narzędzie dla programistów stron internetowych.

Mam włączoną kompresję Gzip również w moim IIS7 za pomocą web.config.

użytkownik495450
źródło
Google udostępnia również test strony: developers.google.com/speed/pagespeed/insights
Dr. Aaron Dishno
0

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

auf deutsch bitte schön

Stefan Michev
źródło