Drupal 7 Caching einzelner Seiten (auch Caching in iFrames) verhindern mit Kontext und Context HTTP Headers

Drupal 7 Caching einzelner Seiten (auch Caching in iFrames) verhindern mit Kontext und Context HTTP Headers

Caching ist ein erstklassiges Werkzeug, führt allerdings hin und wieder zu seltsamen Erkenntnissen. Im konkreten Fall haben wir via Drupal Widgets erzeugt, die als iFrame eingebunden werden können. Sie aktualisieren sich mit einem kleinen JavaScript Snippet alle X Sekunden selbst. Soweit so gut!
Aber warum läuft ein JS-Timer im Internet Explorer iFrame im "eigentlich" neu geladenen Inhalt einfach weiter? Warum ändert sich der Inhalt nicht?
Der Internet Explorer cached den Inhalt der Seite, doch wie können wir dies verhindern, ohne das Caching der gesamten Seite zu beeinflussen?

Lösung:

Die Lösung liegt seitens Drupal in den Modulen ‎Context‎ und ‎Context HTTP Headers‎. Mit Kontexten lassen sich Bedingungen und Ereignisse für (Teil-)Bereiche der Seite sowie entsprechende Reaktionen definieren. Über das ‎Context HTTP Headers‎ Zusatzmodul lässt sich dieses Verhalten um HTTP-Header ergänzen.

Definieren wir also einen Kontext für die Widgets und fügen als HTTP-Header den folgenden Eintrag ein:

CACHE-CONTROL:NO-CACHE
EXPIRES:0

Und schon ist das Problem auch im geliebten Internet Explorer behoben.

Tipp:

Testen lassen sich die HTTP Header übrigens wunderbar mit dem Firefox Plugin: https://addons.mozilla.org/de/firefox/addon/live-http-headers/

Viel Spaß damit und lasst Euch nicht ärgern ;)

Kommentare

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt. Wenn Sie ein zulässiges Avatar mit Ihrer E-Mail-Adresse verknüpft haben, wird dieses als Avatar verwendet.

Weitere Informationen über Formatierungsoptionen

Aktualisieren Geben Sie die Zeichen ein, die Sie im Bild sehen. Geben Sie die im Bild dargestellten Zeichen ein; wenn Sie diese nicht lesen können, senden Sie das Formular ohne Eingabe ab, um ein neues Bild zu generieren. Groß-/Kleinschreibung wird nicht beachtet.  Switch to audio verification.