it-swarm.com.de

Was ist der Standardwert für die Cache-Steuerung?

Mein Problem ist: Manchmal hat der Browser einige Ressourcen zwischengespeichert, auch wenn ich sie bereits geändert habe. Aber nach F5 ist alles gut.

Den ganzen Nachmittag habe ich diesen Fall studiert. Jetzt habe ich den Punkt "Last-Modified" oder "Cache-Control" vollständig verstanden. Und ich weiß, wie ich mein Problem löse (nur .js? -Version oder explizite max-age = xxxx). Aber das Problem ist noch ungelöst: Wie geht der Browser mit dem Antwortheader ohne "Cache-Control" so um:

Content-Length: 49675
Content-Type: text/html
Last-Modified: Thu, 27 Dec 2012 03:03:50 GMT
Accept-Ranges: bytes
Etag: "0af7fcbdee3cd1:972"
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Thu, 24 Jan 2013 07:46:16 GMT 

Sie zwischenspeichern sie eindeutig, wenn "In der Bar eingeben"

enter image description here

39
rhapsodyn

RFC 7234 gibt an, was Browser und Proxys standardmäßig tun sollen:

Zwar ist das Caching eine rein optionale Funktion von HTTP, es kann jedoch .__ sein. davon ausgegangen, dass die Wiederverwendung einer zwischengespeicherten Antwort wünschenswert ist und dass Die Wiederverwendung ist das Standardverhalten, wenn keine Anforderung oder keine lokale Konfiguration verhindert es. Daher sind HTTP-Cache-Anforderungen Der Fokus lag darauf, zu verhindern, dass ein Cache entweder ein nicht wiederverwendbares Element speichert Antwort oder erneute Verwendung einer gespeicherten Antwort auf unangemessene Weise statt dass Zwischenspeicher immer bestimmte Antworten speichern und wiederverwenden.

14
SilverlightFox

Zwischenspeicherung ist normalerweise in browers standardmäßig aktiviert, sodass Sie mit cache-control dieses Verhalten anpassen oder deaktivieren können.

Zwar ist das Zwischenspeichern ein rein optisches Feature von HTTP, es kann jedoch davon ausgegangen werden, dass die Wiederverwendung einer zwischengespeicherten Antwort wünschenswert ist und dass eine solche Wiederverwendung das Standardverhalten ist, wenn dies durch keine Anforderung oder lokale Konfiguration verhindert wird. Daher konzentrieren sich die HTTP-Cache-Anforderungen darauf, zu verhindern, dass ein Cache entweder eine nicht wiederverwendbare Antwort speichert oder eine gespeicherte Antwort auf unangemessene Weise wiederverwendet, anstatt zu verlangen, dass Caches immer bestimmte Antworten speichern und wiederverwenden. [ https://tools.ietf.org/html/rfc7234#section-2]

Der Zeitpunkt, zu dem der Browser eine zwischengespeicherte Antwort für frisch hält, ist in der Regel relativ zum Zeitpunkt der letzten Änderung:

Da Origin-Server nicht immer explizite Verfallszeiten bereitstellen, KANN ein Cache möglicherweise eine heuristische Verfallszeit zuweisen, wenn keine explizite Zeit angegeben wird, wobei Algorithmen verwendet werden, die andere Header-Feldwerte verwenden (z. B. die Zeit der letzten Änderung) das Header-Feld Last-Modified enthält (Abschnitt 2.2 von [RFC7232]), sollten Caches einen heuristischen Ablaufwert verwenden, der seit diesem Zeitpunkt nicht mehr als einen Bruchteil des Intervalls beträgt. Eine typische Einstellung dieser Fraktion kann 10% sein. [ https://tools.ietf.org/html/rfc7234#section-4.2.2]

Dieser Beitrag enthält Details darüber, wie die verschiedenen Browser diesen Wert berechnen.

10
Jon

Der Standardheader für die Cache-Steuerung lautet: Private

Ein Cache-Mechanismus kann diese Seite in einem privaten Cache zwischenspeichern und nur an einen einzelnen Client erneut senden. Dies ist der Standardwert. Die meisten Proxyserver werden Seiten mit dieser Einstellung nicht zwischenspeichern.

Siehe http://msdn.Microsoft.com/de-de/library/ms524721%28v=vs.90%29.aspx

7
Stevie

Die Lebensdauer der Frische wird anhand mehrerer Header berechnet. Wenn ein Header "Cache-control: max-age = N" angegeben wird, ist die Lebensdauer der Frische gleich N. Wenn dieser Header nicht vorhanden ist, was sehr häufig der Fall ist, wird geprüft, ob ein Expires-Header vorhanden ist. Wenn ein Expires-Header vorhanden ist, bestimmt sein Wert minus dem Wert des Date-Headers die Lebensdauer der Frische. Wenn keine Kopfzeile vorhanden ist, suchen Sie nach einer Kopfzeile der letzten Änderung. Wenn dieser Header vorhanden ist, entspricht die Lebensdauer des Caches dem Wert des Date-Headers minus dem Wert des Last-modified-Headers geteilt durch 10.

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Caching_FAQ

2
kouut

Ohne den Cache-Steuerungsheader fordert der Browser die Ressource jedes Mal an, wenn eine neue (?) Seite geladen wird. Wenn Sie die Taste F5 drücken, um ein zwischengespeichertes Element auf dieser Seite zu annullieren (oder sogar logisch zu entfernen), wird das vollständige Neuladen erzwungen, da keine lokale Version verfügbar ist. Ich bin nicht sicher, ob der Browser diese Ressourcen aus dem Cache entfernt, bevor Sie sie erneut anfordern.

Das Lustige daran ist, dass es in einigen Browsern einige 'zusätzliche' Einstellungen gibt, die einige Optimierungen bewirken, z. B. das einmalige Anfordern einer Ressource pro Seite. Wenn Sie ein Bild haben, das sich für jede Anforderung wie ein Zähler ändert, wird nur eine Version dieses Bildes angezeigt, auch wenn Sie es mehrmals verwenden.

Der nächste ist, dass der Browser Bilder verwendet, die nicht explizit als Nocache festgelegt wurden, indem er eine Art lokaler "bevorzugter" Zwischenspeicherung anwendet. Wenn Sie jedes Mal eine Anforderung haben möchten, müssen Sie festlegen, dass die Gültigkeitsdauer erneut gültig ist, und als abgelaufenes Datum -1 oder ähnliches festgelegt werden.

Abhängig von der Ressource, die nichts angibt, lösen sich daher häufig einige Standardwerte aus, die Sie nicht vom Lesen der Spezifikationen erwarten würden.

Möglicherweise gibt es auch ein anderes Verhalten, wenn es sich bei der Quelle um eine lokale Quelle, eine Festplatte oder einen echten entfernten Internetserver handelt. Nicht alle Browser verhalten sich anders und ich bin ziemlich eingeschränkt.

Es ist hilfreich, www.google.com zu besuchen und nach den Tracking-Pixeln ihrer Seitenanfragen zu suchen (zwei 1x1-Pixel, die von metrics.gstats.com mit zufälligem Teil der Subdomäne angefordert werden). 

Wenn Sie Firebug zum Auschecken der Kopfzeile verwenden, sehen Sie, dass sie die Nocache-Direktiven auf jede mögliche Weise angeben. Der Header liest sich wie folgt:

Alternate-Protocol  443:quic
Cache-Control   no-cache, must-revalidate
Content-Length  35
Content-Type    image/gif
Date    Mon, 25 Nov 2013 14:33:30 GMT
Expires Fri, 01 Jan 1990 00:00:00 GMT
Last-Modified   Tue, 14 Aug 2012 10:47:46 GMT
Pragma  no-cache
Server  sffe
X-Content-Type-Options  nosniff
X-Firefox-Spdy  3
X-XSS-Protection    1; mode=block

Versuchen Sie dies als Einstellung und prüfen Sie, ob dadurch das Problem gelöst wird, dass der Browser Ihre geänderten Ressourcen nicht übernommen hat. Die Direktive must-revalidate bewirkt, dass sogar Proxy-Caches jedes Mal eine Ressource anfordern und auf Antworten prüfen, die nicht geändert wurden.

Ich erlebe zurzeit etwas Ähnliches. Ich habe eine localhost-Verbindung für den etag und alles, was passiert, ist, dass der Cache niemals fragt. Ich habe keine Caching-Informationen oder ähnliches festgelegt. Wenn Sie alleine eine etag angeben, bewirkt dies, dass FireFox die Ressource nicht erneut anfordert. Ich erlebe also so etwas wie dein Problem.

0
Martin Kersten

In deinem Fall hast du Etag: "0af7fcbdee3cd1:972" im Antwortheader, wird also auch zwischengespeichert.

0
DappWind