Par Les meilleures pratiques de Yahoo pour les sites web à haute performance J'aimerais supprimer les Etags de mes en-têtes (je gère manuellement toute ma mise en cache et je n'ai pas besoin des Etags... et quand/si je dois passer à une ferme, j'aimerais vraiment les supprimer). J'utilise IIS7 sur Windows Server 2008. Quelqu'un sait-il comment je peux faire cela ?
Réponses
Trop de publicités?Sous IIS7, le numéro de changement de l'Etag (la partie de l'Etag qui suit : ) est toujours fixé à 0.
Ainsi, l'Etag du serveur ne varie plus d'un serveur à l'autre pour le même fichier et la meilleure pratique de Yahoo ne s'applique donc plus vraiment.
Comme il est impossible de supprimer l'en-tête ETag sur IIS7, il est probablement préférable de ne pas le modifier du tout. J'ai constaté que la règle de configuration la plus utile est de loin "Si la valeur par défaut ne casse pas quelque chose, laissez-la tranquille".
On pourrait penser que faire cela dans le web.config fonctionnerait pour désactiver les ETags dans IIS7. Mais la trace du renifleur confirme que l'ETag est envoyé vers le bas de toute façon.
<httpProtocol>
<customHeaders>
<remove name="ETag" />
</customHeaders>
</httpProtocol>
Utiliser blank ne fonctionne pas non plus. L'ETag est envoyé vers le bas de toute façon.
<httpProtocol>
<customHeaders>
<add name="ETag" value="" />
</customHeaders>
</httpProtocol>
Le fait de définir l'ETag sur des guillemets vides comme le suggèrent d'autres sites ne fonctionne pas.
<httpProtocol>
<customHeaders>
<add name="ETag" value="""" />
</customHeaders>
</httpProtocol>
Causes encore plus ETag à envoyer vers le bas :
ETag: "8ee1ce1acf18ca1:0",""
En conclusion, rien de ce que je peux essayer ou penser ne fonctionne pour 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 si grave que ça. 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 changements à apporter au web.config :
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By"/>
</customHeaders>
</httpProtocol>
<modules>
<add name="CustomHeaderModule" type="StrongNamespace.HttpModules.CustomHeaderModule"/>
</modules>
</system.webServer>
</configuration>
Je me rends compte que c'est une vieille question, mais je suis tombé dessus en cherchant une solution. Je pense avoir trouvé une réponse raisonnable que j'ai postée pour cette question .
- Réponses précédentes
- Plus de réponses