Compression GZip sur IIS 7.5 ne fonctionne pas

J’essaye de supporter la compression GZip pour mes fichiers statiques sous IIS (qui devrait être activé par défaut mais pas) mais qui ne fonctionne pas encore. Voici la section sous le noeud dans le fichier web.config de l’application Web.

                    

Je l’ai essayé avec Google Chrome. Voici les en-têtes de demande;

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, dégonfler, sdch

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

Cache-Control: no-cache

Connexion: restr en vie

Hôte: my-website-url

Pragma: no-cache

Agent utilisateur: 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 réponse;

Accept-Ranges: octets

Content-Length: 232651

Type de contenu: application / x-javascript

Date: jeu. 04 août 2011 08:58:19 GMT

ETag: “a69135734a50cc1: 0”

Dernière modification: lun. 01 août 2011 12:56:37 GMT

Serveur: Microsoft-IIS / 7.5

X-Powered-By: ASP.NET

Je vérifie le fichier applicationHost.config et trouve des nœuds comme ci-dessous;

 ---- 
----
---- ----

Qu’est-ce que j’oublie ici?

Après de nombreuses recherches, j’ai finalement trouvé ce qui fonctionnait sur ma compression IIS 7.5. Pour commencer, IIS ne compresse pas un fichier à moins qu’il ne soit suffisamment chargé. Cela soulève la question “Qu’est-ce que IIS considère assez souvent?” Eh bien, les valeurs par défaut sont 2 fois toutes les 10 secondes. Yikes!

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ébloquez d’abord la section:

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

Déverrouillé la section “system.webServer / serverRuntime” dans le chemin de configuration “MACHINE / WEBROOT / APPHOST”.

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





Dans ce cas, je l’ai configuré pour bash 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 aussi à 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 fichier web.config car nous avons un certain nombre de serveurs et de batteries avec différents sites, et il est plus facile de le contrôler. de ce niveau de granularité.

Une chose à garder à l’esprit est que le premier hit est généralement renvoyé immédiatement après décompression, mais fait tourner un thread pour compresser le fichier en arrière-plan afin de traiter la réponse avec une compression pour les futures requêtes.

Aussi, avez-vous essayé d’utiliser un client différent (par exemple IE)?

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

Les configurations ci-dessous ont fonctionné pour moi. Il suffit de remplacer la section httpCompression dans applicationHost.config par les données ci-dessous et de redémarrer IIS. C’est tout!!!

                       

Après avoir configuré cela, j’ai reçu les en-têtes ci-dessous, ce qui indique que les données sont compressées à l’aide de la compression gzip.

 Cache-Control → no-cache Content-Encoding → gzip Content-Length → 4202 Content-Type → application/json; charset=utf-8 Date → Wed, 22 Jul 2015 07:40:17 GMT Expires → -1 Pragma → no-cache Vary → Accept-Encoding X-Powered-By → ASP.NET 

La configuration ci-dessus concerne l’ensemble des services Internet. Si vous souhaitez configurer cela pour un seul site Web, remplacez

 

avec

 

dans applicationHost.config et au lieu de remplacer la section httpCompression dans applicationHost.config, ajoutez-la sous la balise system.webServer dans web.config de votre site Web

Assurez-vous également que vous avez spécifié le type MIME correct pour vos données. Dans mon cas, c’était en JSON, donc j’ai utilisé les configurations ci-dessous

   

Il m’a fallu du temps pour comprendre cela. La définition de l’atsortingbut frequentHitThreshold sur 1 sur le noeud system.webServer / serverRuntime dans le fichier applicationHost.config doit faire l’affaire, comme indiqué à l’ adresse 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 s’il y a d’autres conséquences à la suite de cette mise en place!

“La configuration de system.webServer n’autorise pas httpCompression au niveau du site Web” https://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 dynamic et l’activer pour le serveur et ce site factice.

Une chose que nous avons trouvée était que notre site Web Azure atteignait son utilisation maximale du processeur en raison de l’existence d’une ressource WebJob à ressources élevées. Nous avions essayé tous les parameters ci-dessus et rien ne fonctionnait. Ensuite, nous avons vérifié l’utilisation du processeur de ressources et nous avons constaté qu’il était de 80% +. A 80% de la charge du processeur, le gzip ne fonctionne plus!