Cachingproblem? Umleitung auf frisch geschriebenes HTML
Kurt
- perl
Hallo
ich habe ein Perl-cgi das eine HTML-Datei updated. Zum Abschluss schicke ich ein Redirect auf besagte Datei.
Leider hab ich das Problem das der Apache dann oft (nicht immer) die veraltete Version anzeigt und ein explizites reload notwendig ist.
Kennt jemand diesen Effekt? Ich vermute intuitiv das Perl irgendwo die Ausgabe chacht, das kann man auch irgendwo abschalten... aber es könnte auch am Apache liegen.
Gruß und dank
Kurt
Moin!
Kennt jemand diesen Effekt? Ich vermute intuitiv das Perl irgendwo die Ausgabe chacht, das kann man auch irgendwo abschalten... aber es könnte auch am Apache liegen.
Nein, Perl dürfte da nicht schuldig sein. Statisch auf dem Server als Datei abgelegte HTML-Seiten werden vom Apache in der Regel mit gewisser Caching-Erlaubnis ausgeliefert. Außerdem sind oft auch Browser so konfiguriert, dass sie nach neuen Seitenversionen erst ab einem bestimmten Alter der bereits geladenen Cache-Version nachfragen.
Eine banale Lösung dürfte sein, anstelle der Weiterleitung auf die Datei durch Perl einfach den Inhalt der Datei auszugeben.
Die Alternative wäre, die durch die Seite mitgelieferten HTTP-Header genauer zu untersuchen und bei Bedarf anzupassen (z.B. durch passende Konfigurationsangaben in .htaccess).
- Sven Rautenberg
Hi,
Eine banale Lösung dürfte sein, anstelle der Weiterleitung auf die Datei durch Perl einfach den Inhalt der Datei auszugeben.
Die Alternative wäre, die durch die Seite mitgelieferten HTTP-Header genauer zu untersuchen und bei Bedarf anzupassen (z.B. durch passende Konfigurationsangaben in .htaccess).
Noch eine Alternative waere, die Datei jedesmal mit einem zufaelligen, bei jedem aufruf wechselnden Parameter aufzurufen, den du mit Perl generierst.
Beispiel:
erster Aufruf: ./seite.html?4456744567
zweiter: ./seite.html?8877645667
usw.
So sollte dem Browser vorgetaeuscht werden, dass es sich jedesmal um eine neue Seite handelt, die er noch nicht im Cache hat.
mfG,
steckl
Hi
danke Leute, den Browsercache hab ich ganz vergessen, Steckls Lösung gefällt mir am besten, weil ich das generelle Cachingverhalten statischer Seiten nicht davon abhängig machen möchte.
Eine direkte Ausgabe des Seiteninhalts durch das CGI würde auch die falsche URL anzeigen ... obwohl jetzt Steckls Timestamp drinsteckt ... unschön!
Ich seh gerade dass ich bei CGI->redirect auch ein "expires now" angeben kann, vielleicht hilft das ja ...
Dank und Gruß
Kurt
Moin Sven,
Die Alternative wäre, die durch die Seite mitgelieferten HTTP-Header genauer zu untersuchen und bei Bedarf anzupassen (z.B. durch passende Konfigurationsangaben in .htaccess).
Expireangaben in .htaccess setzen aber die installation des Apachemoduls mod_expires voraus, oder?
Gruß
Kurt
Hallo
ich habe ein Perl-cgi das eine HTML-Datei updated. Zum Abschluss schicke ich ein Redirect auf besagte Datei.
Leider hab ich das Problem das der Apache dann oft (nicht immer) die veraltete Version anzeigt und ein explizites reload notwendig ist.
Kennt jemand diesen Effekt? Ich vermute intuitiv das Perl irgendwo die Ausgabe chacht, das kann man auch irgendwo abschalten... aber es könnte auch am Apache liegen.
Gruß und dank
Kurt
Könnts nicht eher daran liegen dass dein BROWSER cacht. mach doch den header so dass die Datei nicht gecached werden soll
Hallo SQLer!
Könnts nicht eher daran liegen dass dein BROWSER cacht. mach doch den header so dass die Datei nicht gecached werden soll
Ich denke eher, dass es am Browser liegt. Ich hatte mit Mathias Brodala (glaube ich) diesbezüglich einen kleinen Austausch, um zu zeigen, wie Opera da besonders hartnäckig im Cachen ist ;)
Viele Grüße aus Frankfurt/Main,
Patrick
Hi
die sauberste Lösung scheint zu sein den HTTP-Header im cgi zu setzen, das funktioniert in CGI.pm mit
print $query->redirect(
-location=>"$urlLocation",
-expires=>'now',
);
Obwohls jetzt klappt, Firefox scheint einen Bug zu haben in der Pageinfo weil nie das expiredatum angezeigt wird.
Gruß & Dank
Kurt