Kurt: Cachingproblem? Umleitung auf frisch geschriebenes HTML

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

  1. 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

    --
    "Love your nation - respect the others."
    1. 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

      1. 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

    2. 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

  2. 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

    1. 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

      --

      _ - jenseits vom delirium - _
      <hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash>
      Nichts ist unmöglich? Doch!
  3. 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