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?
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die Verwendung von Expires-Richtlinie, sonst wird der browser immer überprüfen, um zu sehen, ob die Inhalte aktualisiert hat.
Wenn ein Cache-Eintrag hat eine gültige Ablaufdatum kann der browser die Inhalte wiederverwenden, ohne dass der server kontaktiert werden, wenn eine Seite oder Website ist überarbeitet. Dies reduziert die Anzahl der Netzwerk-Roundtrips für Häufig besuchte Seiten. Zum Beispiel das Google-logo ist festgelegt, dass er im Jahr 2038, und Sie werden nur heruntergeladen werden auf Ihren ersten Besuch google.com oder wenn Sie leer deinen browser-cache. Wenn Sie jemals wollen, um das Bild zu ändern, die Sie verwenden können, eine andere Bild-Datei Namen oder den Pfad.
Ändern in IIS7 verwenden Sie folgenden. Dies ist am einfachsten zu verwalten, wenn Sie halten Sie statische Inhalte in bestimmte Verzeichnisse.
Log auf dem server
Öffnen Sie IIS-Manager (start -> administrativen tools -> iis-manager
Erweitern Sie den Knoten server
Erweitern Sie den Knoten sites
Öffnen Sie die Website, und navigieren Sie zu dem Verzeichnis, das Sie ändern möchten
Öffnen Sie den IIS HTTP-Antwort-Header-Abschnitt
Klicken Sie auf Set Common-Header auf dem task-Fensterbereich auf der rechten Seite
Set "Erlischt Web-Inhalte", wie Ihre app erforderlich sind.
InformationsquelleAutor Gary
expires-header verwenden, anstatt die cache-Steuerung.Erzählen Sie Ihren server für die erste Zeit, die mir dienen, Inhalte aus meinem browser-cache bis zu diesem Ablaufdatum. Es wird keine cross-checking für änderungen in der Datei bis zu Ihrem Ablaufdatum.
fügen Sie die Kopfzeile in Ihrem web.config system.webServer-Abschnitt in etwa so:
cache-control
nicht?Vielen Dank für die Klarstellung - so ist
cache-control
kaputt?Nein, ich glaube es gibt etwas, das beide, du und ich fehlen ich lese mehr auf die cache-Steuerung an dieser Stelle werden Sie wissen lassen, wenn ich herausfinden, klar. Ja aber habe mein Vorschlag für Sie gearbeitet
Ihre XML-config hier setzt die statische Inhalte zu verwenden, den HTTP -
Expires
Kopf, während mir in der Frage bewirkt, dass dieCache-Control
header. Nach einigen Recherchen scheint es, dass entweder funktioniert gut, obwohl einige wirklich alte Browser nicht erkennenCache-Control
(vor IE 5.5). Viele Ratschläge, die auf der web-Mitgliedstaaten zu verwendenExpires
, aber wir nicht unterstützen, IE5, so ist es kein problem. Danke für die Antwort(+1)InformationsquelleAutor sushil bharwani
Kurze anwser: entfernen Etag und verwenden Sie Expire-header.
Sollten Sie sich die 35 Yahoo Performance best practices, und insbesondere:
Für jede Regel, die Sie decken in der Regel Apache und IIS web-server-Konfigurationen.
Edit: okay, es sieht aus wie es gibt keine einfache Möglichkeit zum entfernen von Etags in IIS, neben der Installation einige 3rd-party-software...
Warum sollte der
expire
header funktionieren, wenncache-control
nicht? Wir haben nicht zu unterstützen IE5 und alles vergangene, unterstützt HTTP 1.1Danke für die Antwort (+1).
Expires
undCache-Control
gleichermaßen gut funktionieren (es sei denn, du bist auf der IE5 oder unten, dann nurExpires
tut), solange entweder festgelegt ist, sind Sie gut. Stellt sich heraus, dass meine eigentliche problem war, dass ich F5/refresh zu überprüfen, und das bewirkt immer die browser-ping für jede Datei und Holen Sie sich die 304 not Modified Antworten.InformationsquelleAutor Brian Clozel