Sven Rautenberg: Tipps und Tricks

Beitrag lesen

Moin!

Hallo Sven,

Vom IE und Mozilla/Netscape (egal welche Version) kann man
das leider nicht sagen - die rufen beim "Zurück" in der
Regel die Seite neu vom Server ab, und in dieser Seite
fehlen natürlich deine Eingaben.

Das ist inkorrekt. Mozilla nimmt, wenn ein Cache-Header
geschickt wurde, die Seiten solange aus dem Cache, wie er
darf. Wurde keiner geschickt, schickt er ein conditional get.

Ja, aber das ist das Problem: Er nimmt sie aus dem _Cache_, wenn er darf, ansonsten fordert er sie neu an. So schlau ist der IE sicher auch. Der History-Mechanismus erlaubt aber keinen Zugriff auf den Cache oder Neuanforderung, sofern der User das nicht konfiguriert hat:

"User agents often have history mechanisms, such as "Back" buttons and history lists, which can be used to redisplay an entity retrieved earlier in a session. By default, the Expires field does not apply to history mechanisms. If the entity is still in storage, a history mechanism should display it even if the entity has expired, unless the user has specifically configured the agent to refresh expired history documents."
(Quelle: RFC 1945, Abschnitt 10.7 "Expires")

Das bedeutet ganz schlicht und einfach, dass der User-Agent beim Navigieren mit Back- und Forward-Funktionen die Seite nicht neu zu laden hat - egal ob sie mittlerweile ungültig geworden ist oder nicht.

"An expiration time cannot be used to force a user agent to refresh its display or reload a resource; its semantics apply only to caching mechanisms, and such mechanisms need only check a resource's expiration status when a new request for that resource is initiated. See section 13.13 for explanation of the difference between caches and history mechanisms."
(Quelle: RFC 2068, Abschnitt 13.2.1. "Server-Specified Expiration")
sowie
"History mechanisms and caches are different. In particular history mechanisms SHOULD NOT try to show a semantically transparent view of the current state of a resource. Rather, a history mechanism is meant to show exactly what the user saw at the time when the resource was retrieved."
(Quelle: RFC 2068, Abschnitt 13.13. "History Lists")
sind in dieser Hinsicht absolut unmißverständlich.

Wo der Browser den mit History-Funktion angeforderten letztgesehenen Zustand wieder herholt, ist den Browserprogrammierern überlassen - das darf auch der Cache sein, wenn sichergestellt ist, dass die History-Funktion ordnungsgemäß funktioniert. Denn ein mögliches Szenario wäre ja, dass in einem Browserfenster eine alte Version der Ressource mittels History angesteuert wird, während in einem anderen Fenster zuvor die aktuelle Version der Ressource vom Server geladen wurde. Und da sich Ressourcen durchaus bei zwei Requests unterschiedlich darstellen können (auch hier im Forum ist das so: Wenn z.B. ein Beitrag archiviert ist, kriegt man eine Fehlermeldung - mit History muß man ihn aber immer noch erreichen können, wenn man ihn in dieser Browsersession schon mal gesehen hat und er mit "Back" und/oder "Forward" noch erreichbar ist), kann man den Cache eigentlich nicht als Datenquelle für die History verwenden.

- Sven Rautenberg

--
Diese Signatur gilt nur am Freitag.