Aktivieren Sie IIS7 gzip


229

Wie kann ich IIS7 aktivieren, um statische Dateien wie js und css zu gzipen, und wie kann ich testen, ob IIS7 sie wirklich gzipet, bevor ich sie an den Client sende?

Antworten:


243

Aufbau

Sie können die GZIP-Komprimierung vollständig in Ihrer Web.configDatei aktivieren . Dies ist besonders nützlich, wenn Sie Shared Hosting verwenden und IIS nicht direkt konfigurieren können oder wenn Sie möchten, dass Ihre Konfiguration zwischen allen Umgebungen übertragen wird, auf die Sie abzielen.

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

Testen

Verwenden Sie die Entwicklertools in Chrome oder Firebug für Firefox, um zu testen, ob die Komprimierung funktioniert oder nicht, und stellen Sie sicher, dass der HTTP-Antwortheader festgelegt ist:

Content-Encoding: gzip

Beachten Sie, dass dieser Header nicht vorhanden ist, wenn der Antwortcode 304 (nicht geändert) lautet. Wenn dies der Fall ist, führen Sie eine vollständige Aktualisierung durch (halten Sie die Umschalt- oder Steuertaste gedrückt, während Sie die Aktualisierungstaste drücken) und überprüfen Sie sie erneut.


@DenNukem, sorry ich bin mir nicht sicher. Ich habe dies nur auf IIS7 getestet. Möchte noch jemand einen Kommentar abgeben?
Drew Noakes

21
Achtung - es funktioniert nur, wenn der Abschnitt httpCompression in applicationhost.config entsperrt ist. Standardmäßig ist der Abschnitt für Änderungen gesperrt, sodass das Überschreiben in web.config nicht funktioniert. Verschwendete mehrere Stunden damit. stackoverflow.com/a/2894695/245460 , siehe Kommentar im folgenden Artikel.
Karel Kral

Stellen Sie sicher, dass es sich um eine installierte Funktion der Webrolle und auch über MSDN handelt: "Sie können auch Platzhaltereinträge für die MIME-Typen hinzufügen. Sie können MIME-Typen jedoch nur für die Webserverebene festlegen. Zum Beispiel, um die statische Komprimierung für zu aktivieren Fügen Sie bei allen MIME-Typen für die Standardwebsite zunächst Platzhaltereinträge für die MIME-Typen für die Serverebene hinzu und aktivieren Sie dann die statische Komprimierung für die Standardwebsite. "
Luke Puplett

12
Die dynamische Komprimierung funktioniert auch nur, wenn Sie das Modul "Dynamische Inhaltskomprimierung" auf dem Server installiert haben (über das Webplattform-Installationsprogramm erreichbar). Sie benötigen dies, wenn Sie Css / Js-Bundles verwenden.
Mark

Nur CSS wird komprimiert, .jsnicht wahr? Auch versucht hinzuzufügen application/x-javascript. Bei Verwendung zusammen mit Tomcat wurde daher der directoryParameter entfernt.
Coding_idiot

58

Sie müssen die Funktion in der Systemsteuerung für Windows-Funktionen aktivieren:

Screenshot der IIS-Funktion


16
In Windows Server 2008 R2 befindet sich dies unter Server-Manager> Rollen> Webserver (IIS). Klicken Sie im Abschnitt "Rollen" auf "Rollendienste hinzufügen". "Dynamische Inhaltskomprimierung" wird unter der Überschrift "Leistung" aufgeführt.
Jonathan Little

37

Globales Gzip in HttpModule

Wenn Sie keinen Zugriff auf die endgültige IIS-Instanz haben (Shared Hosting ...), können Sie ein HttpModule erstellen, das diesen Code zu jedem HttpApplication.Begin_Request-Ereignis hinzufügt:

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;

Testen

Ein dickes Lob, ohne Test wird keine Lösung gefunden. Ich verwende gerne das Firefox-Plugin " Liveheaders ", das alle Informationen zu jeder http-Nachricht zwischen Browser und Server anzeigt , einschließlich Komprimierung und Dateigröße (die Sie mit der Dateigröße auf dem Server vergleichen können).


3
Ich verwende Shared Hosting und musste keinen Code schreiben, um die GZIP-Ausgabekomprimierung zu aktivieren. Dies war nur über Web.config möglich. Siehe meine Antwort: stackoverflow.com/questions/702124/enable-iis7-gzip/…
Drew Noakes

2
Ich habe die ersten drei Zeilen am Anfang der einen Aspx-Seite platziert, die ich komprimieren wollte, und es funktioniert! Danke dir! Dies ist so viel weniger problematisch als jeder andere Ansatz und funktioniert für mich unter IIS 6.
DenNukem

1
Dies ist absolut der richtige Weg.
Matthew James Davis


2

Ich musste die Funktion nur in Windows-Funktionen hinzufügen, wie Charlie erwähnt hat. Für Leute, die sie unter Windows 10 oder Server 2012+ nicht finden können, finden Sie sie wie folgt. Ich kämpfte ein bisschen

Windows 10

Geben Sie hier die Bildbeschreibung ein

Windows Server 2012 R2

Geben Sie hier die Bildbeschreibung ein

Fensterserver 2016

Geben Sie hier die Bildbeschreibung ein


1

Wenn Sie YSlow mit Firebug verwenden und die Leistung Ihrer Seite analysieren, wird YSlow Ihnen mit Sicherheit mitteilen, welche Artefakte auf Ihrer Seite nicht gzip'd sind!




0

Probieren Sie Firefox mit installierten Firebug-Addons aus. Ich benutze es; tolles Tool für Webentwickler.

Ich habe die Gzip-Komprimierung auch in meinem IIS7 mit web.config aktiviert.


Google hat auch einen
Seitentest zur

0

Für alle armen Jungs, die mit einem deutschen / deutschen Server zu kämpfen haben :)

auf deutsch bitte schön

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.