SUPINFO International University

SUPINFO Institute of Information Technology
Laboratoire Microsoft




Tous les Articles du Laboratoire Microsoft

Activer la compression HTTP sur le couple IIS 6.0 / ISA 2004
Accueil > Articles > Système
Auteurs 
Jean-yves RIVALLAN
LABORATOIRE SUPINFO DES TECHNOLOGIES MICROSOFT
Assistant Formateur


 Tous les articles de cet auteur

3,5/5

Bien


32805
21/75

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>



En Savoir Plus 
Evaluez cet article 


Pour afficher ou poster un commentaire, cliquez sur ce lien : Forum-Microsoft



Retrouvez ci-dessous les autres sections du Laboratoire Microsoft