it-swarm.com.de

Wie entferne ich eTag-Header von IIS7?

Per Yahoo's Best Practices für Hochleistungswebsites , ich möchte Etags aus meinen Headern entfernen (ich verwalte mein gesamtes Caching manuell und brauche keine Etags ... und wann/wenn ich Müssen Sie auf eine Farm skalieren, möchten Sie sie wirklich weg). Ich verwende IIS7 unter Windows Server 2008. Weiß jemand, wie ich das machen kann?

82
Brent Broome

Unter IIS7 wird die Etag-Änderungsnummer (der Teil des Etag, der folgt:) immer auf 0 gesetzt.

Daher variiert das Etag vom Server nicht mehr von Server zu Server für die gleiche Datei und daher gilt das Yahoo-Best-Practice nicht mehr wirklich.

Da Sie den ETag-Header auf IIS7 nicht wirklich unterdrücken können, ist es wahrscheinlich das Beste, wenn Sie überhaupt nicht damit experimentieren. Ich habe festgestellt, dass die mit Abstand nützlichste Konfigurationsregel lautet: "Wenn die Standardeinstellung nicht zu Problemen führt, lassen Sie sie in Ruhe".

39
AnthonyWJones

Sie würden denken, dass dies in der Datei web.config funktioniert, um ETags in IIS7 zu deaktivieren. Aber der Sniffer Trace bestätigt, dass ETag trotzdem gesendet wird.

<httpProtocol>
    <customHeaders>
        <remove name="ETag" />
    </customHeaders>
</httpProtocol>

Leerzeichen zu verwenden, funktioniert auch nicht. ETag wird trotzdem runtergeschickt.

<httpProtocol>
    <customHeaders>
        <add name="ETag" value="" />
    </customHeaders>
</httpProtocol>

Das Setzen des ETag auf leere Anführungszeichen, wie andere Websites vorgeschlagen haben, funktioniert nicht.

<httpProtocol>
    <customHeaders>
        <add name="ETag" value="&quot;&quot;" />
    </customHeaders>
</httpProtocol>

Bewirkt, dass noch mehr ETag gesendet wird:

 ETag: "8ee1ce1acf18ca1: 0", "" 

Zusammenfassend kann ich nichts versuchen oder an Werke denken, um ETag auf IIS7 zu töten, zumindest ohne benutzerdefinierte Module usw. zu schreiben.

32
Jeff Atwood

Ich habe ein benutzerdefiniertes http-Modul geschrieben, um dies zu handhaben. Es ist wirklich nicht so schlimm, wie es sich anhört. Hier ist der 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");
        }
    }
}

Hier sind die gewünschten Änderungen an der 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>
23
Dan

Mir ist klar, dass dies eine alte Frage ist, aber ich bin darauf gestoßen, als ich nach einer Lösung gesucht habe. Ich glaube, ich habe eine vernünftige Antwort gefunden, die ich für diese Frage gepostet habe.

13
Nathan Fox

Wir hatten dieses Problem und sogar das Setzen eines leeren benutzerdefinierten ETag-Headers in IIS 7 funktionierte nicht für alle Dateien (zum Beispiel Bilddateien). Am Ende haben wir ein HttpModule erstellt, das den ETag-Header explizit entfernt .

7
jwanagel

UPDATE: URL Rewrite Module-Anforderung dank Benutzer @ChrisBarr hinzugefügt

In iis 6 ist es ganz einfach, einen benutzerdefinierten Header für 'ETag' = "" hinzuzufügen.

In IIS 7, nachdem ich diesen Thread gelesen und herausgefunden hatte, dass es ohne die Verwendung eines benutzerdefinierten http-Moduls unmöglich ist, konnte ich einfach Microsoft's URL Rewrite-Modul installieren und hinzufügen eine Outbound-Rewrite-Regel wie folgt:

<outboundRules>
  <rule name="Remove ETag">
    <match serverVariable="RESPONSE_ETag" pattern=".+" />
    <action type="Rewrite" value="" />
  </rule>
</outboundRules>

Dies funktioniert tatsächlich und Sie benötigen kein benutzerdefiniertes http-Modul (dll). Das Entsperren des Konfigurationsabschnitts system.webServer und das Festlegen von customHeaders usw. funktioniert nicht - zumindest in allen Fällen, die ich versucht habe. Eine einfache Outbound-Rewrite-Regel erfüllt dies.

6
AndrewPK

By the way, wenn Sie iis8 verwenden, ist es einfach

<element name="clientCache">
   <attribute name="cacheControlMode" type="enum" defaultValue="NoControl">
          <enum name="NoControl" value="0" />
          <enum name="DisableCache" value="1" />
          <enum name="UseMaxAge" value="2" />
          <enum name="UseExpires" value="3" />
  </attribute>
  <attribute name="cacheControlMaxAge" type="timeSpan" defaultValue="1.00:00:00" />
  <attribute name="httpExpires" type="string" />
  <attribute name="cacheControlCustom" type="string" />
  <attribute name="setEtag" type="bool" defaultValue="true" />
</element>

IIS 8.0: ETag verwenden oder nicht verwenden

4
JeffZhnn

In diesem Blogbeitrag erfahren Sie, wie Sie den Etag-HTTP-Header in iis6, iis7 und iis7.5 vollständig entfernen

http://lightspeednow.com/blog/2010/05/21/iis-tutorial-how-to-completely-remove-etags-entity-tags-from-iis6-iis7-and-iis7-5/

2
Brian

Ich habe das removeetag.dll gefunden am http://www.caspianit.co.uk/iis7-etag-problem/ und es hat perfekt funktioniert.

hoffe, es wird auch für Sie gut funktionieren

2
Ranjith

http://www.jesscoburn.com/archives/2008/10/02/quickly-configure-or-disable-etags-in-iis7-or-iis6/ hat eine schöne Bildanleitung.

Im Wesentlichen erstellen Sie einen benutzerdefinierten Antwortheader mit dem Namen ETag und machen dessen Wert leer.

2
Sören Kuklau

In IIS 7 sollten Sie sich keine Gedanken mehr über Etags machen müssen, da die IIS Konfigurationsnummer immer auf 0 gesetzt ist.

Es gibt immer noch ein Problem, wenn Sie IIS6- und IIS7-Webserver in derselben Farm haben. In diesem Fall müssten Sie die IIS6-Konfigurationsnummer manuell auf 0 setzen, wie in diesem Artikel beschrieben.

Etags sind sehr nützlich, da Sie den Dateinamen nicht ändern müssen, wie dies bei einem Stapelüberlauf der Fall ist (d. H. Default.css? 1234). Wenn Sie die Datei default.css ändern, wird das etag geändert, und nachfolgende Anforderungen erhalten die Datei vom Server und nicht vom Cache.

1
Alex

Ich denke, das wird funktionieren .. Ich weiß, entfernen und leer funktioniert nicht.

    <configuration>
     <system.webServer>
       <httpProtocol>
          <customHeaders>
            <add name="ETag" value=" " /> 
          </customHeaders>
        </httpProtocol>
       </configuration>
     </system.webServer>
1