HTTP-caching-Verwirrung

Ich bin mir nicht sicher, ob dies ein server-Problem, oder ob ich scheitern zu verstehen, wie HTTP-caching funktioniert wirklich.

Habe ich eine ASP-MVC-Anwendung, die Sie auf IIS7. Es gibt eine Menge statischer Inhalte als Teil der Webseite, einschließlich viele CSS -, Javascript-und Bild-Dateien.

Für diese Dateien möchte ich den browser-cache, um Sie für mindestens einen Tag - unsere .css .js, .gif-und .png-Dateien selten ändern.

Meine web.config geht so:

<system.webServer>
    <staticContent>
        <clientCache cacheControlMode="UseMaxAge" 
                     cacheControlMaxAge="1.00:00:00" />
    </staticContent>
</system.webServer>

Das problem ich bekomme ist, dass der browser (getestet mit Chrome, IE8 und FX) nicht zu sein scheinen Zwischenspeichern der Dateien, wie ich erwarten würde. Ich habe die Standard-Einstellungen (überprüfen, ob eine neuere Seiten automatisch im IE).

Auf den ersten Besuch des content-downloads wie erwartet

HTTP/1.1 200 OK
Cache-Control: max-age=86400
Content-Type: image/gif
Last-Modified: Fri, 07 Aug 2009 09:55:15 GMT
Accept-Ranges: bytes
ETag: "3efeb2294517ca1:0"
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Mon, 07 Jun 2010 14:29:16 GMT
Content-Length: 918

<content>

Ich denke, dass die Cache-Control: max-age=86400 solltest deinen browser nicht auf die Seite anfordern, wieder für einen Tag.

Ok, so jetzt die Seite neu geladen und der browser fordert das Bild wieder. Dieses mal wird es eine leere Antwort mit Header:

HTTP/1.1 304 Not Modified
Cache-Control: max-age=86400
Last-Modified: Fri, 07 Aug 2009 09:55:15 GMT
Accept-Ranges: bytes
ETag: "3efeb2294517ca1:0"
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Mon, 07 Jun 2010 14:30:32 GMT

So wie es aussieht ist der browser gesendet hat, an die ETag Rückseite (wie eine eindeutige id für die Ressourcen), und der server ist wieder mit einer 304 not Modified sagen dem browser, den Sie verwenden können, die zuvor heruntergeladene Datei.

Scheint es mir, dass es richtig wäre, für viele caching-Situationen, aber hier will ich nicht die extra-Runde Reise. Ist mir egal, wenn das Bild wieder veraltet, wenn die Datei auf dem server ändert.

Gibt es eine Menge von diesen Dateien (auch mit sprite-Karten und dergleichen) und viele unserer Kunden haben sehr langsame Netzwerke. Jeder round-trip-ping für die, die 304 status nimmt über eine 10, eine 5. von einer Sekunde. Viele haben auch IE6, die hat nur 2 HTTP-verbindungen gleichzeitig. Das Ergebnis ist, dass unsere Anwendung wird sehr langsam für diese clients mit jeder Seite ein extra paar Sekunden, um zu überprüfen, dass der statische Inhalt hat sich nicht verändert.

Welche response-header fehlen mir dazu führen würde, dass der browser zu aggressiv cache-Dateien?

Wie würde ich diese in eine .Net web.config für IIS7?

Bin ich Missverständnis, wie HTTP-caching funktioniert in den ersten Platz?

Können Sie deaktivieren ETag? Könnten Sie beheben, aber ich bin mir nicht sicher.
Ich werde versuchen, das entfernen der ETag, aber für meine test-server scheint es zu passen
Wenn Sie auf aktualisieren oder F5, der browser wird immer eine server-Anfrage (eventuell eine bedingte Anforderung) unabhängig von den cache-Einstellungen
danke! Das war es! Stellt sich heraus, dass Expires und Cache-Control genauso gut arbeiten, aber F5/refresh führt immer die 304 überprüfen Sie noch einmal passieren. Aber, dass bei einer Antwort, und Sie können einige rep 🙂

InformationsquelleAutor Keith | 2010-06-07

Schreibe einen Kommentar