Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
IE11 und Caching
s4ndwichMakeR Offline
Realitätsfeinmotoriker‮

Beiträge: 5.031
Registriert seit: Jul 2008
Beitrag #1
IE11 und Caching
Ich habe heute das seltsamste Caching-Verhalten eines Browsers dennje erlebt.

Ich lade eine Hauptseite, die ein Last-Modified mitgibt. Über einen Link gehe ich in eine Unterseite, die dasselbe Last-Modified mitgibt und springe über einen Link wieder zurück. Das Ganze wiederhole ich mehrmals.

Nun würde man davon ausgehen, dass folgendes passiert:
  • Browser: GET Hauptseite
  • Webserver: 200, da hast du! Last-Modified vor ’ner Stunde.
  • Browser: Ah, super, die nehm ich mal in den Cache.
  • User: Dann klick’ ich mal auf den Link für die Unterseite.
  • Browser: GET Unterseite
  • Webserver: 200, da hast du! Last-Modified vor ’ner Stunde.
  • Browser: Guck an, die nehme ich wieder in den Cache.
  • User: Dann klick ich mal auf den Link für die Hauptseite.
  • Browser: GET Hauptseite, aber nur If-Modified-Since vor ’ner Stunde.
  • Webserver: 304, da hat sich nichts verändert.
  • Browser: Alles klar, dann nehm ich meine Version von eben.
  • User: Ich klicke jetzt wieder auf die Unterseite.
  • Browser: GET Unterseite, aber nur If-Modified-Since vor ’ner Stunde.
  • Webserver: 304, da hat sich auch nichts verändert.
  • … das sollte sich jetzt mit vielen 304s des Servers wiederholen, solange nichts geändert wird.

Was macht der IE11? Solange ich auf keiner Seite explizit F5 mache, fragt er den Webserver nicht mal mehr, ob eine neue Version der Seite vorliegt. Kein Request! Der IE11 sieht ein 304 vorher wie ein Wahrsager (inkl. mit der Wahrsagern nachgesagten Erfolgsquote).

[Bild: text3645.png]

Ist da irgendwo eine Fehlkonfiguration? Ist das ein Bug? Oder ist das tatsächlich die Mentalität der IE-Entwickler? Ich kann’s eigentlich kaum glauben, wie man etwas so Fundamentales so fundamental verkacken kann. Ich hab schon von Workarounds gelesen à la ›immer negatives Expiration-Datum mitgeben‹. Muss ich jetzt noch OVER 9000 weitere Header-Zeilen (gibt ja auch noch ETags und Caching-Direktiven) mitgeben, nur damit der IE annähernd wie ein Browser funktioniert?

• • • – • – – • – –
27.04.2015 19:20
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
freaked Offline
ILOVEBUNNY32=1

Beiträge: 13.993
Registriert seit: Jul 2008
Beitrag #2
RE: IE11 und Caching
wenn es nicht die einstellung ist, dann weiß ich es auch nicht

[Bild: freaked.banner.gif]
27.04.2015 19:33
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
CHRiSNEW Offline
Internetblasensammler

Beiträge: 2.825
Registriert seit: Jul 2008
Beitrag #3
RE: IE11 und Caching
Willkommen in der IE-Freakshow.

Schickst du ein Cache-Control: must-revalidate mit?

signature pending…
27.04.2015 23:02
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
s4ndwichMakeR Offline
Realitätsfeinmotoriker‮

Beiträge: 5.031
Registriert seit: Jul 2008
Beitrag #4
RE: IE11 und Caching
(27.04.2015 19:33)freaked schrieb:  wenn es nicht die einstellung ist, dann weiß ich es auch nicht

(•) Automatisch

(27.04.2015 23:02)CHRiSNEW schrieb:  Willkommen in der IE-Freakshow.

Schickst du ein Cache-Control: must-revalidate mit?

Nein, bislang habe ich noch nicht alle Variationen der Caching-Direktiven ausprobiert. Ich denke, das werde ich mal tun müssen.

• • • – • – – • – –
28.04.2015 07:16
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.787
Registriert seit: Jul 2008
Beitrag #5
RE: IE11 und Caching
(27.04.2015 19:20)s4ndwichMakeR schrieb:  Ist da irgendwo eine Fehlkonfiguration? Ist das ein Bug? Oder ist das tatsächlich die Mentalität der IE-Entwickler? Ich kann’s eigentlich kaum glauben, wie man etwas so Fundamentales so fundamental verkacken kann. Ich hab schon von Workarounds gelesen à la ›immer negatives Expiration-Datum mitgeben‹. Muss ich jetzt noch OVER 9000 weitere Header-Zeilen (gibt ja auch noch ETags und Caching-Direktiven) mitgeben, nur damit der IE annähernd wie ein Browser funktioniert?
Das ist komplett legitimes Verhalten. Solange du nicht "Cache-Control: no-cache" o.ä. ähnliche Header gesetzt hast, darf der Browser gecachte Requests ohne Revalidierung aus dem Cache präsentieren.

Das Google Stichwort hier ist Freshness & Stale Responses, das HTTP RFC hat da mehr Informationen. Grundsätzlich gilt, dass wenn du keine Cache-Control-Header angibst, dass der Browser dann Heuristiken anwenden darf um zu bestimmen ob ne Seite Stale ist oder nicht. Solange eine Seite nicht Stale ist, muss der Browser auch nicht mit If-Modified-Since o.ä. revalidieren.

Wäre auch ziemlich dämlich jedes Mal 100ms Latenz mit Revalidierung zu verschwenden, nur um es dann trotzdem aus dem Cache anzuzeigen. Der Zeitverschwender ist ja heutzutage die Latenz, nicht die Bandbreite.

Caching ist ein unheimlich komplexes Problem. Der HTTP-Caching-Standard ist ziemlich genial in der Hinsicht, aber er funktioniert halt anders als die meisten das erwarten. Ich hatte bisher leider auch nie die Zeit und Musse mich da wirklich einzulesen, so dass ich keine direkte Empfehlung aussprechen könnte. Spontan glaube ich aber, dass du entweder must-revalidate mit max-age oder gleich no-cache haben willst.

Nachtrag: Nach etwas durchscrollen glaube ich schon, dass hier ne Heuristik anschlägt.
Code:
If the response has a Last-Modified header field (Section 2.2 of
   [RFC7232]), caches are encouraged to use a heuristic expiration value
   that is no more than some fraction of the interval since that time.
   A typical setting of this fraction might be 10%.

Wenn dir das nicht passt, musst du eine explizite Freshness-Angabe machen, mit Cache-Control max-age oder Expires.
(Dieser Beitrag wurde zuletzt bearbeitet: 28.04.2015 09:49 von gandro.)
28.04.2015 09:38
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
s4ndwichMakeR Offline
Realitätsfeinmotoriker‮

Beiträge: 5.031
Registriert seit: Jul 2008
Beitrag #6
RE: IE11 und Caching
Ich gebe jetzt wie in Quelle empfohlen Cache-Control: private, must-revalidate, max-age=1 und Expires: -1 mit und es scheint zu funktionieren.

(28.04.2015 09:38)gandro schrieb:  Der HTTP-Caching-Standard ist ziemlich genial in der Hinsicht, aber er funktioniert halt anders als die meisten das erwarten.

Das unerwartete Verhalten ist für mich eher der Beweis, dass der Standard nicht genial ist. Was nützt ein Standard, der einige Fälle genau definiert und andere Fälle mit »Macht, was ihr wollt!« abspeist? Heuristik! In einem Standard! Das mag jetzt durch die Möglichkeit, darauf Einfluss zu nehmen, legitimiert werden, aber es bleibt mindestens denkwürdig.

Ich weiß gerade gar nicht, was mich mehr stört: Das uneinheitliche Verhalten der Browser, die schwammigen Passagen aus dem Standard oder mal wieder allgemein der ganze, unübersichtliche HTTP/1.1-Bloat. Ärgernis schränkt wohl Urteilsvermögen ein. Ich komm nochmal drauf zurück.

• • • – • – – • – –
28.04.2015 10:34
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
freaked Offline
ILOVEBUNNY32=1

Beiträge: 13.993
Registriert seit: Jul 2008
Beitrag #7
RE: IE11 und Caching
(28.04.2015 07:16)s4ndwichMakeR schrieb:  
(27.04.2015 19:33)freaked schrieb:  wenn es nicht die einstellung ist, dann weiß ich es auch nicht

(•) Automatisch
Selbst schuld

[Bild: freaked.banner.gif]
(Dieser Beitrag wurde zuletzt bearbeitet: 28.04.2015 10:44 von freaked.)
28.04.2015 10:44
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
s4ndwichMakeR Offline
Realitätsfeinmotoriker‮

Beiträge: 5.031
Registriert seit: Jul 2008
Beitrag #8
RE: IE11 und Caching
(28.04.2015 10:44)freaked schrieb:  Selbst schuld

Kann im Unternehmen leider keinen Einfluss drauf nehmen, was da per Policy verteilt wird. Ich glaube aber, dass die anderen Einstellungen auch nicht zum gewünschten Verhalten geführt hätten.

• • • – • – – • – –
(Dieser Beitrag wurde zuletzt bearbeitet: 28.04.2015 10:57 von s4ndwichMakeR.)
28.04.2015 10:56
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.787
Registriert seit: Jul 2008
Beitrag #9
RE: IE11 und Caching
(28.04.2015 10:34)s4ndwichMakeR schrieb:  Ich gebe jetzt wie in Quelle empfohlen Cache-Control: private, must-revalidate, max-age=1 und Expires: -1 mit und es scheint zu funktionieren.
Expires sollte nicht nötig sein wenn du max-age hast. Vermutlich macht das mehr kaputt als es fixt, weil der Browser jetzt von dir widersprüchliche Informationen kriegt (Die Seite ist noch eine Sekunde lang gültig und diese Seite ist schon nicht mehr gültig). Ausserdem bin ich mir nicht sicher, ob Expires:-1 überhaupt gültiges HTTP ist.

Warum setzt du "private"? Sind es wirklich userspezifische Daten? Mit deinem Problem hat das ja eigentlich nichts zu tun.
28.04.2015 11:58
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
CHRiSNEW Offline
Internetblasensammler

Beiträge: 2.825
Registriert seit: Jul 2008
Beitrag #10
RE: IE11 und Caching
(28.04.2015 11:58)gandro schrieb:  Ausserdem bin ich mir nicht sicher, ob Expires:-1 überhaupt gültiges HTTP ist.

Nein, ist es nicht.

Zitat:
The format is an absolute date and time as defined by HTTP-date in section 3.3.1; it MUST be in RFC 1123 date format:

Expires = "Expires" ":" HTTP-date

Zu 1123 gilt 822: http://www.hackcraft.net/web/datetime/#rfc822

signature pending…
28.04.2015 12:07
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste