|
Note: Certaines partie de l'article suivant sont rendues obsolètes par le Service Pack 2 d'ISA 2004.
À mesure qu'une page HTML se complexifie, gagne en fonctionalités
diverses et/ou en contenu, sa taille a tendance à augmenter. Or, même
à l'heure de la démocratisation des lignes haut débit,
diminuer la taille d'une page web présente de sérieux avantages
: amélioration du confort du visiteur et gain de bande passante. Plusieurs
pratiques permettent de maintenir la taille d'une page à un niveau raisonnable
: utilisation de formats de compressions judicieux pour les images et utilisation
des CSS par exemple. Nous nous focaliseront dans cet article sur les fichiers
textes (HTML, XML, JS &
CSS). En effet, le standard HTTP 1.1 définit
la possibilité pour un serveur web de délivrer son contenu texte
après compression. Certains fichiers peuvent voir leur taille réduite
de plus de 80%.
IIS 6.0
peut se comporter comme tel, mais ce n'est malheureusement pas le comportement
par défaut. De plus, si le site est protégé par ISA
Server 2004 par le biais d'une règle de publication
web, les requêtes des clients seront filtrées de leur demande de
compression (l'en-tête HTTP accept-encoding), rendant
inutile l'activation seule coté IIS. Ce comportement par défaut
peut également etre modifié. En revanche, si vous utilisez ISA
Server comme proxy, sachez que les demandes de compression seront également
filtrées et que celà n'est pas modifiable, ISA ayant besoin d'un
contenu en texte clair pour pouvoir le mettre en cache.
Configuration de IIS 6.0
Sauvegarde de la Métabase de IIS
Cette opération s'opère en faisant un clic droit sur le serveur
dans la console Gestionnaire des services Internet (IIS) et en choisissant
Sauvegarder/Restaurer la Configuration. Si le moindre problème
survient pendant les opérations suivantes, vous pouvez à tout
moment revenir à votre configuration initiale en restaurant votre métabase
originale en utilisant le même assistant.
Activer la compression
C'est ici que vous allez choisir de compresser le contenu statique et/ou le
contenu dynamique.

Dans la console Gestionnaire des services Internet (IIS),
faites un clic droit sur le conteneur Sites Web de votre serveur et
choisissez Propriétés.

Dans l'onglet Service, choisissez les paramêtres
qui conviennent à vos besoins.
Ajouter la Web Service Extension (WSE)
La compression est effectuée par gzip.dll. Ce composant est installé
en même temps que les services Internet. Néanmoins, vous devez
indiquer à IIS de l'utiliser.

Dans la section Extensions du service Web, faites un
clic droit et choisissez Ajouter une nouvelle extension de service Web...

Donnez un nom à l'extension, ajoutez le fichier C:\WINDOWS\system32\inetsrv\gzip.dll
et autorisez l'extension que vous ajoutez. Validez en cliquant sur OK.

Vérifiez que l'extension est bien ajoutée &
autorisée.
Modifier la Metabase
Une ultime modification nécessaire est la désignation des types
de fichiers à compresser, ainsi que le degré de compression (un
degré plus fort économisera plus de bande passante mais impactera
plus le CPU). Cela peut être fait manuellement en éditant C:\Windows\system32\inetsrv\Metabase.xml
comme l'exemple fourni en annexe (Nouveauté
de IIS 6.0, ce fichier peut être édité alors que le service
tourne, si vous l'avez précedemment configuré) ou alors en utilisant
adsutil.vbs situé dans C:\Inetpub\AdminScripts\.
Les deux sections à modifier sont W3Svc/Filters/Compression/DEFLATE/
et W3Svc/Filters/Compression/GZIP/ (les navigateurs modernes préfèrent
la compression gzip).
Dans ces deux sections, trois parametres sont critiques : HcFileExtensions
est la liste des extensions de fichiers statiques à compresser, HcScriptFileExtensions
est la liste des extensions de fichiers dynamiques à compresser et HcDynamicCompressionLevel
est le degré de compression (de 1 à 10). Le degré de compression
9 étant généralement le meilleur compromis entre consommation
CPU et compression. Ci-joint une copie d'ecran des deux sections une fois modifiées.
Script d'activation des types de fichiers compressés &
du niveau de compression
cscript.exe C:\Inetpub\AdminScripts\adsutil.vbs set W3Svc/Filters/Compression/GZIP/HcFileExtensions "htm" "html" "txt" "css" "js"
cscript.exe C:\Inetpub\AdminScripts\adsutil.vbs set W3Svc/Filters/Compression/DEFLATE/HcFileExtensions "htm" "html" "txt" "css" "js"
cscript.exe C:\Inetpub\AdminScripts\adsutil.vbs set W3Svc/Filters/Compression/GZIP/HcScriptFileExtensions "asp" "dll" "exe" "aspx" "asmx"
cscript.exe C:\Inetpub\AdminScripts\adsutil.vbs set W3Svc/Filters/Compression/DEFLATE/HcScriptFileExtensions "asp" "dll" "exe" "aspx" "asmx"
cscript.exe C:\Inetpub\AdminScripts\adsutil.vbs set W3Svc/Filters/Compression/GZIP/HcDynamicCompressionLevel 9
cscript.exe C:\Inetpub\AdminScripts\adsutil.vbs set W3Svc/Filters/Compression/DEFLATE/HcDynamicCompressionLevel 9
IISreset.exe /restart
Jusqu'ici, la modification a été faite au niveau global, ce qui
signifie que tous les sites web sont impactés. Si vous souhaitez n'activer
la compression que sur un ou plusieurs sites en particulier, utilisez la syntaxe
du script suivant.
Script de désactivation de la compression au niveau du service
et activation au niveau d'un site web en particulier (remplacez site#
par l'ID du site)
cscript.exe C:\Inetpub\AdminScripts\adsutil.vbs set W3Svc/root/DoStaticCompression False
cscript.exe C:\Inetpub\AdminScripts\adsutil.vbs set W3Svc/root/DoDynamicCompression False
cscript.exe C:\Inetpub\AdminScripts\adsutil.vbs set W3Svc/site#/root/DoStaticCompression True
cscript.exe C:\Inetpub\AdminScripts\adsutil.vbs set W3Svc/site#/root/DoDynamicCompression True
IISreset.exe /restart
Configuration d'ISA 2004
MSDN fournit dans un
article de la knowledge base la solution au problème du filtrage
de l'en tête accept-encoding. En effet, une propriété
SendAcceptEncodingHeader existe sur chaque règle de publication web.
Or cette propriété est par défaut à false,
sauf pour les publications de Outlook Web Access. Malheureusement, cette propriété
n'est pas modifiable via la console d'administration d'ISA, il faut donc utiliser
les API pour la modifier. Le script vbs suivant vous permet de modifier simplement
vos règles.
Script d'activation/désactivation de SendAcceptEncodingHeader pour une
règle donnée. (veillez à modifier la variable rulename)
' SAEHeader.vbs
' Source : http://blogs.technet.com/tristank/archive/2005/01/12/351223.aspx
' Traduction par Jean-Yves Rivallan
Function ToggleClientAcceptHeaders(targetrulename)
Dim root
Set root = CreateObject("FPC.Root")
Dim firewall ' Un objet FPCArray
Dim policyrules ' Une collection FPCPolicyRules
Set firewall = root.GetContainingArray
Set policyrules = firewall.ArrayPolicy.PolicyRules
for each rule in policyrules ' Itération sur les règles de publication web
if rule.Name = targetrulename then
wscript.echo "La règle: " + rule.Name + " a été trouvée."
if rule.WebPublishingProperties.SendAcceptEncodingHeader = false then
wscript.echo "SendAcceptEncodingHeader ÉTAIT DESACTIVÉ, DÉSORMAIS ACTIVÉ."
rule.WebPublishingProperties.SendAcceptEncodingHeader = true
elseif rule.WebPublishingProperties.SendAcceptEncodingHeader = true then
wscript.echo "SendAcceptEncodingHeader ÉTAIT ACTIVÉ, DÉSORMAIS DÉSACTIVÉ."
rule.WebPublishingProperties.SendAcceptEncodingHeader = false
end if
wscript.echo "Sauvegarde de la règle"
rule.Save
end if
next
wscript.echo "Fin."
End Function
dim rulename
rulename = "Règle Test" ' Nom de la règle à modifier
ToggleClientAcceptHeaders(rulename)
Conclusion
La compression HTTP a permis de faire chuter la bande passante consommée
par les pages du site du Laboratoire Microsoft et peut en faire de même
pour votre site. Elle ne nécessite aucun ajout à vos serveurs
IIS & ISA et n'impose que très peu de charge CPU (aux environs de
5%) au serveur web. Pourquoi se priver ?
Sources & Liens Utiles
Annexes
La section de Metabase.xml qui définit les paramètres
de compression
<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/deflate"
HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
HcCreateFlags="0"
HcDoDynamicCompression="TRUE"
HcDoOnDemandCompression="TRUE"
HcDoStaticCompression="FALSE"
HcDynamicCompressionLevel="9"
HcFileExtensions="htm
html
txt
css
js"
HcOnDemandCompLevel="10"
HcPriority="1"
HcScriptFileExtensions="asp
dll
exe
aspx
asmx"
>
</IIsCompressionScheme>
<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/gzip"
HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
HcCreateFlags="1"
HcDoDynamicCompression="TRUE"
HcDoOnDemandCompression="TRUE"
HcDoStaticCompression="TRUE"
HcDynamicCompressionLevel="9"
HcFileExtensions="htm
html
txt
css
js"
HcOnDemandCompLevel="10"
HcPriority="1"
HcScriptFileExtensions="asp
dll
exe
aspx
asmx"
>
</IIsCompressionScheme>
<IIsCompressionSchemes Location ="/LM/W3SVC/Filters/Compression/Parameters"
HcCacheControlHeader="max-age=86400"
HcCompressionBufferSize="8192"
HcCompressionDirectory="%windir%\IIS Temporary Compressed Files"
HcDoDiskSpaceLimiting="FALSE"
HcDoDynamicCompression="TRUE"
HcDoOnDemandCompression="TRUE"
HcDoStaticCompression="TRUE"
HcExpiresHeader="Wed, 01 Jan 1997 12:00:00 GMT"
HcFilesDeletedPerDiskFree="256"
HcIoBufferSize="8192"
HcMaxDiskSpaceUsage="99614720"
HcMaxQueueLength="1000"
HcMinFileSizeForComp="1"
HcNoCompressionForHttp10="FALSE"
HcNoCompressionForProxies="FALSE"
HcNoCompressionForRange="FALSE"
HcSendCacheHeaders="FALSE"
>
</IIsCompressionSchemes>
 |
|
|
 |
Pour afficher ou poster un commentaire, cliquez sur ce lien : Forum-Microsoft
|
|