Activer gzip IIS7


229

Comment puis-je activer IIS7 pour gzip des fichiers statiques comme js et css et comment puis-je tester si IIS7 les gzip vraiment avant de les envoyer au client?

Réponses:


243

Configuration

Vous pouvez activer la compression GZIP entièrement dans votre Web.configfichier. Ceci est particulièrement utile si vous êtes sur un hébergement partagé et ne pouvez pas configurer IIS directement, ou si vous souhaitez que votre configuration soit exécutée entre tous les environnements que vous ciblez.

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

Essai

Pour tester si la compression fonctionne ou non, utilisez les outils de développement dans Chrome ou Firebug pour Firefox et assurez-vous que l'en-tête de réponse HTTP est défini:

Content-Encoding: gzip

Notez que cet en-tête ne sera pas présent si le code de réponse est 304 (non modifié). Si tel est le cas, effectuez une actualisation complète (maintenez la touche Maj ou contrôle pendant que vous appuyez sur le bouton d'actualisation) et vérifiez à nouveau.


@DenNukem, désolé, je ne suis pas vraiment sûr. Je n'ai testé cela que sur IIS7. Quelqu'un d'autre veut commenter?
Drew Noakes

21
Attention - cela ne fonctionne que si la section httpCompression dans applicationhost.config est déverrouillée. Par défaut, la section est verrouillée pour les modifications, donc la substitution dans web.config ne fonctionne pas. J'ai perdu plusieurs heures à ce sujet. stackoverflow.com/a/2894695/245460 , voir le commentaire ci-dessous.
Karel Kral

Assurez-vous qu'il s'agit d'une fonctionnalité installée du rôle Web et également à partir de MSDN: "Vous pouvez également ajouter des entrées génériques pour les types MIME. Cependant, vous pouvez définir des types MIME pour le niveau de serveur Web uniquement. Par exemple, pour activer la compression statique pour tous les types MIME pour le site Web par défaut, ajoutez d'abord des entrées génériques pour les types MIME au niveau du serveur, puis activez la compression statique pour le site Web par défaut. "
Luke Puplett,

12
La compression dynamique ne fonctionnera également que si le module Dynamic Content Compression est installé sur le serveur (accessible via le programme d'installation de la plate-forme Web). Vous en aurez besoin si vous utilisez des bundles Css / Js.
Mark

seul css est compressé, .jsnon. Aussi, j'ai essayé d'ajouter application/x-javascript. Utilisation avec tomcat, donc supprimé le directoryparamètre.
coding_idiot

58

Vous devrez activer la fonctionnalité dans le panneau de configuration des fonctionnalités de Windows:

Capture d'écran de la fonction IIS


16
Dans Windows Server 2008 R2, il se trouve sous Gestionnaire de serveur> Rôles> Serveur Web (IIS). Cliquez sur "Ajouter des services de rôle" dans la section "Rôles". "Dynamic Content Compression" est répertorié sous l'en-tête "Performance".
Jonathan Little

37

Gzip global dans HttpModule

Si vous n'avez pas accès à l'instance IIS finale (hébergement partagé ...), vous pouvez créer un HttpModule qui ajoute ce code à chaque événement 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;

Essai

Bravo, aucune solution ne se fait sans test. J'aime utiliser le plugin Firefox " Liveheaders ", il affiche toutes les informations sur chaque message http entre le navigateur et le serveur, y compris la compression, la taille du fichier (que vous pouvez comparer à la taille du fichier sur le serveur).


3
J'utilise l'hébergement partagé et je n'ai pas eu besoin d'écrire de code pour activer la compression de sortie GZIP. Cela a été possible via Web.config seul. Voir ma réponse: stackoverflow.com/questions/702124/enable-iis7-gzip/…
Drew Noakes

2
J'ai placé les trois premières lignes au début de la page aspx que je voulais compresser, et ça marche! Je vous remercie! C'est tellement moins compliqué que toute autre approche, et cela fonctionne sur IIS 6 pour moi.
DenNukem

1
C'est absolument la façon de procéder.
Matthew James Davis


2

Je n'avais besoin que d'ajouter la fonctionnalité dans les fonctionnalités de Windows comme Charlie l'a mentionné.Pour les personnes qui ne peuvent pas la trouver sur Windows 10 ou sur le serveur 2012+, trouvez-la comme ci-dessous. J'ai un peu mal

Windows 10

entrez la description de l'image ici

serveur Windows 2012 R2

entrez la description de l'image ici

serveur de fenêtres 2016

entrez la description de l'image ici


1

Si vous utilisez YSlow avec Firebug et analysez les performances de votre page, YSlow vous dira certainement quels artefacts sur votre page ne sont pas compressés!





En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.