Selon les meilleures pratiques de Yahoo pour les sites Web de haute performance , je voudrais supprimer Etags de mes en-têtes (je gère manuellement tout mon cache et je n’ai pas besoin d’Etags … et quand / si je dois évoluer vers une ferme, Je les aimerais vraiment bien). J’exécute IIS7 sur Windows Server 2008. Quelqu’un peut-il savoir comment je peux le faire?
Sous IIS7, le numéro de modification Etag (la partie de l’Etag suivante:) est toujours défini sur 0.
Par conséquent, l’Etag du serveur ne varie plus d’un serveur à l’autre pour un même fichier et, par conséquent, les meilleures pratiques de Yahoo ne s’appliquent plus vraiment.
Comme vous ne pouvez pas supprimer l’en-tête ETag sur IIS7, il serait probablement préférable de ne pas le manipuler. J’ai trouvé que la règle de configuration la plus utile est “Si le défaut ne casse pas, laissez-le seul”.
Vous penseriez que faire cela dans le fichier web.config fonctionnerait pour désactiver les ETags dans IIS7. Mais sniffer trace confirme que ETag est envoyé de toute façon.
L’utilisation de blanc ne fonctionne pas non plus. ETag est envoyé de toute façon.
Définir l’ETag sur des guillemets vierges comme d’autres sites l’ont suggéré ne fonctionne pas.
Donne encore plus d’ ETag:
ETag: "8ee1ce1acf18ca1: 0", ""
En conclusion, rien de ce que je peux essayer de penser à tuer ETag sur IIS7, du moins sans écrire de modules personnalisés, etc.
J’ai écrit un module http personnalisé pour gérer cela. Ce n’est vraiment pas aussi grave que ça en a l’air. Voici le code:
using System; using System.Web; namespace StrongNamespace.HttpModules { public class CustomHeaderModule : IHttpModule { public void Init(HttpApplication application) { application.PostReleaseRequestState += new EventHandler(application_PostReleaseRequestState); } public void Dispose() { } void application_PostReleaseRequestState(object sender, EventArgs e) { HttpContext.Current.Response.Headers.Remove("Server"); HttpContext.Current.Response.Headers.Remove("X-AspNet-Version"); HttpContext.Current.Response.Headers.Remove("ETag"); } } }
Voici les modifications de web.config que vous souhaiterez:
Je me rends compte que c’est une vieille question, mais je l’ai trouvée en cherchant une solution. Je pense avoir trouvé une réponse raisonnable que j’ai affichée pour cette question .
Nous avons eu ce problème, et même la définition d’un en-tête ETag personnalisé vide dans IIS 7 ne fonctionnait pas pour tous les fichiers (par exemple, les fichiers image). Nous avons fini par créer un HttpModule qui supprime explicitement l’en-tête ETag.
UPDATE: ajout de l’exigence du module de réécriture d’URL grâce à l’utilisateur @ChrisBarr
Dans iis 6, c’est facile, vous pouvez append un en-tête personnalisé pour ‘ETag’ = “”
Dans IIS 7, après avoir lu ce fil de discussion et compris qu’il était impossible d’utiliser un module http personnalisé, j’ai constaté que vous pouviez simplement installer le module de réécriture d’URL de Microsoft et append une règle de réécriture sortante comme suit:
Cela fonctionne réellement, et vous n’avez pas besoin d’un module http personnalisé (dll). Le délocking de la section de configuration system.webServer et la définition de customHeaders, etc. ne fonctionnent pas, du moins dans tous les cas que j’ai essayés. Une règle simple de réécriture sortante le fait.
Au fait, quand vous utilisez iis8 c’est simple
IIS 8.0: utiliser ou ne pas utiliser ETag
http://www.jesscoburn.com/archives/2008/10/02/quickly-configure-or-disable-etags-in-iis7-or-iis6/ a un beau guide pictural.
Vous créez essentiellement un en-tête de réponse personnalisé nommé ETag et videz sa valeur.
Découvrez cet article sur la façon de supprimer complètement l’en-tête http d’Etag dans iis6, iis7 et iis7.5
J’ai utilisé le removeetag.dll
trouvé sur http://www.caspianit.co.uk/iis7-etag-problem/ et cela a parfaitement fonctionné.
j’espère que cela fonctionnera bien pour vous aussi
Dans IIS 7, vous ne devriez plus avoir à vous soucier des etags, car le numéro de configuration IIS est toujours défini sur 0.
Il y a toujours un problème si vous avez des serveurs Web IIS6 et IIS7 dans la même batterie. Dans ce cas, vous devez définir manuellement le numéro de configuration IIS6 sur 0, comme décrit dans cet article .
Les balises sont en fait très utiles car vous n’avez pas besoin de changer le nom de fichier comme le fait le débordement de stack (par exemple default.css? 1234). Si vous modifiez le fichier default.css, cela changera l’etag et par conséquent, les requêtes suivantes obtiendront le fichier du serveur et non du cache.
Je pense que cela fonctionnera. Je sais que supprimer et blanc ne fonctionne pas.