73 votes

Comment supprimer les en-têtes eTag de IIS7 ?

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 ?

33voto

AnthonyWJones Points 122520

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".

26voto

Jeff Atwood Points 31111

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="&quot;&quot;" />
    </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.

17voto

Dan Points 859

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>

11voto

Nathan Fox Points 2054

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 .

6voto

jwanagel Points 3531

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X