2009-12-22 4 views
6

Zweiteilige Frage (Teile sind eng verwandt): Mit der Standard-OOTB-ETag-Richtlinie, die IIS7 verwendet, warum sehen wir nicht die If-None-Match/304-Interaktion als wir navigieren durch Seiten?ETags, IIS7, Kernel-Cache-Richtlinie (enableKernelCache)

Der Header zurück für eine leeren Cache-Anforderung, zum Beispiel, sind:

Content-Type image/png 
Last-Modified Thu, 03 Dec 2009 15:51:56 GMT 
Accept-Ranges bytes 
Etag "a8a0628a3074ca1:0" 
Server Microsoft-IIS/7.0 
X-Powered-By ASP.NET 
Date Tue, 22 Dec 2009 19:47:36 GMT 
Content-Length 1780 

... und noch nachfolgende Zugriffe auf der Seite gibt einen 304 Round-Trip für das Bild nicht erzeugen?

Auch die Standard applicationHost Datei für IIS7 hat die folgenden (1):

<caching enabled="true" enableKernelCache="true"> 
    </caching> 

Does enableKernelCache = 'true' auf alle statischen Dateien erweitern, können Sie von der Notwendigkeit befreien Erweiterungen registrieren explizit CacheUntilChange als Kernel Politik (2) zu gewähren:

<caching> 
    <profiles> 
    <add extension=".gif" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" /> 
    <add extension=".png" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" /> 
    <add extension=".js" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" /> 
    <add extension=".css" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" /> 
    <add extension=".jpg" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" /> 
    <add extension=".jpeg" policy="DontCache" kernelCachePolicy="CacheUntilChange" duration="0.00:01:00" location="Any" /> 
    </profiles> 
</caching> 

(1)% systemroot% \ System32 \ inet SRV \ config \ applicationHost.config

(2) http://labs.episerver.com/en/Blogs/Per/Archive/2009/3/Configuring-cache-expiration-on-IIS-7/

Antwort

4

Die Handhabung von ETags und die damit verbundenen If-None-Match/If-Modified-Since etwas Browser abhängig ist. Sie könnten ein paar verschiedene Browser ausprobieren und sehen, was passiert - im Allgemeinen, wenn Sie keine explizite Ablaufzeit einstellen, würde ich erwarten, die 304 zu sehen, wie Sie sagten.

Für das Kernel-Caching ist es standardmäßig für statische Dateien aktiviert. Um zu sehen, was passiert, habe ich fand es hilfreich, den folgenden Befehl ausführen:

netsh http show cachestate 

die Informationen über die Dateien angezeigt, die zur Zeit im Cache sind.

Denken Sie daran, dass Dateien normalerweise innerhalb eines bestimmten Zeitfensters mehrmals referenziert werden müssen, bevor der Kernel sie zwischenspeichert.

+0

Danke, Rick; Ich habe IE8 und FF 3.5 ausprobiert und finde dieses Verhalten ein bisschen komisch - ist es irgendwo dokumentiert? IIS7 (OOTB) gibt keine Verfallsheader aus, nur der ETag; Und noch folgende Anfragen an die Seite erzeugen keine 304s für diese Objekte? – Nariman

+0

Die einzige Dokumentation, die mir bekannt ist, ist die HTTP-Spezifikation. Ich frage mich, ob Sie eine Optimierung pro Sitzung sehen. Haben Sie versucht, den Browser (alle Fenster) zu beenden, neu zu starten und zu sehen, ob das zu 304s führt? Gibt es eine öffentliche Seite, die ich sehen kann und die das von Ihnen beschriebene Verhalten aufweist? – RickNZ

+0

Da die ursprünglichen Antworten keinen Cache-Control-Header haben, ist der Browser (etwas) frei, eine eigene Richtlinie zum Caching zu implementieren. In diesem Fall werden die Bilder für die Dauer der Sitzung zwischengespeichert. Wenn Sie die Registerkarte in IE8 mit Ihrer Site darin schließen und dann eine neue Registerkarte öffnen und zur selben Seite zurückkehren, sehen Sie eine Reihe von IMS/INM-Anfragen und 304 Antworten für alle Bilder. – RickNZ