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).
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?