57 votes

La compression GZip sur IIS 7.5 ne fonctionne pas

J'essaie de prendre en charge la compression GZip pour mes fichiers statiques sous IIS (ce qui devrait être activé par défaut mais ne l'est pas) mais cela ne fonctionne pas jusqu'à présent. Voici la section sous <system.webServer> dans le fichier web.config de l'application web ;

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
  <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" />
  <dynamicTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/x-javascript" enabled="true" />
    <add mimeType="application/json" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </dynamicTypes>
  <staticTypes>
    <add mimeType="text/*" enabled="true" />
    <add mimeType="message/*" enabled="true" />
    <add mimeType="application/x-javascript" enabled="true" />
    <add mimeType="application/atom+xml" enabled="true" />
    <add mimeType="application/xaml+xml" enabled="true" />
    <add mimeType="*/*" enabled="false" />
  </staticTypes>
</httpCompression>

<urlCompression doStaticCompression="true" />

Je l'ai essayé avec Google Chrome. Voici les en-têtes de la requête ;

Accepter:text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8

Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3

Accept-Encoding:gzip,deflate,sdch

Accept-Language:en-US,en;q=0.8

Cache-Control:no-cache

Connexion:keep-alive

Hôte : my-website-url

Pragma:no-cache

User-Agent:Mozilla/5.0 (Windows NT 6.0) AppleWebKit/534.30 (KHTML, comme Gecko) Chrome/12.0.742.122 Safari/534.30

Ce sont les en-têtes de la réponse ;

Accept-Ranges:bytes

Content-Length:232651

Content-Type:application/x-javascript

Date:Thu, 04 Aug 2011 08:58:19 GMT

ETag:"a69135734a50cc1:0"

Dernière modification : Mon, 01 Aug 2011 12:56:37 GMT

Serveur : Microsoft-IIS/7.5

X-Powered-By:ASP.NET

J'ai vérifié le fichier applicationHost.config et j'ai trouvé quelques nœuds comme ci-dessous ;

----

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

----

<section name="urlCompression" overrideModeDefault="Allow" />

----

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/xaml+xml" enabled="true" />
        <add mimeType="*/*" enabled="false" />
    </staticTypes>
</httpCompression>

----

<urlCompression />

Qu'est-ce que je rate ici ?

42voto

Brain2000 Points 865

Après de nombreuses recherches, j'ai enfin trouvé ce qui a permis de faire fonctionner la compression sur mon IIS 7.5. Pour commencer, IIS ne compresse un fichier que s'il est chargé assez souvent. Ce qui amène à la question "qu'est-ce que IIS considère comme assez souvent ?". Eh bien, les valeurs par défaut sont de 2 fois toutes les 10 secondes. Oups !

Ce paramètre peut être modifié dans web.config, mais la section doit d'abord être déverrouillée dans applicationHost.config. Voici les commandes :

Déverrouillez d'abord la section :

C:\Windows\System32\inetsrv\appcmd.exe déverrouiller la configuration /section:system.webServer/serverRuntime

Section déverrouillée "system.webServer/serverRuntime" au niveau du chemin de configuration "MACHINE/WEBROOT/APPHOST".

Maintenant que c'est fait, éditez le fichier web.config et ajoutez l'élément serverRuntime :

<?xml version="1.0" encoding="UTF-8"?>
  <configuration>
    <system.webServer>
       <serverRuntime frequentHitThreshold="1" frequentHitTimePeriod="10:00:00" />
...

Dans ce cas, je l'ai réglé pour qu'il frappe le fichier une fois par période de 10 heures. Vous pouvez ajuster les valeurs si nécessaire. Voici le document qui explique l'élément serverRuntime :

http://www.iis.net/configreference/system.webserver/serverruntime

J'espère que cela vous aidera à faire fonctionner votre compression.

Remarque : vous pouvez également définir l'élément serverRuntime dans le fichier applicationHost.config, mais j'ai choisi de le modifier dans le web.config car nous avons un certain nombre de serveurs et de fermes avec différents sites, et il est plus facile pour moi de le contrôler à ce niveau de granularité.

29voto

EricLaw Points 28850

Il faut garder à l'esprit que la première réponse est généralement renvoyée immédiatement sans compression, mais qu'un fil d'exécution est lancé pour compresser le fichier en arrière-plan afin d'assurer le service de la réponse avec compression pour les futures demandes.

Par ailleurs, avez-vous essayé d'utiliser un autre client (par exemple, IE) ?

13voto

Chris Kolenko Points 509

Assurez-vous d'installer Dynamic Compression sur le serveur. Ajouter/Supprimer des fonctionnalités sous IIS.

6voto

Dale Anderson Points 359

Ça m'a pris du temps pour comprendre ça aussi. La définition de l'attribut frequentHitThreshold à 1 sur le nœud system.webServer/serverRuntime dans le fichier applicationHost.config devrait faire l'affaire, comme indiqué à l'adresse suivante http://www.iis.net/ConfigReference/system.webServer/serverRuntime .

Vous pouvez le faire en exécutant la commande suivante en tant qu'administrateur :

%windir%\system32\inetsrv\appcmd set config /section:serverRuntime /frequentHitThreshold:1 /commit:apphost

Un mot d'avertissement - le concept de "coup fréquent" ne semble pas spécifique à la compression. Je n'ai aucune idée si d'autres conséquences peuvent résulter de ce réglage !

1voto

IceN Points 881

"La configuration de system.webServer ne permet pas la httpCompression au niveau du site Web" http://serverfault.com/questions/125139/iis7-dynamic-compression-not-success-reason-12

Pourquoi utilisez-vous des fichiers de configuration ? Essayez simplement de créer un nouveau site Web factice avec un fichier txt de plus de 2700 octets. Vous pouvez également essayer d'installer le module de compression dynamique et de l'activer sur le serveur de ce site fictif.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X