glupto: refresh/expires

Hallo, bisher hatte ich auf meiner Seite mit der Ausgabe zahlreicher feeds ein automatisches reload eingestellt durch:

<meta http-equiv="refresh" content="600; URL=http://meineseite.de/index.php">

Das führt aber dazu, dass bei den Nutzern je nach Browser-Einstellung aus dem Cache ein alter Stand geladen wird. Ich möchte, dass nach ein paar Minuten ein "refresh" passiert, aber immer von der Originaladresse, geht das so (es lässt sich schlecht testen)

<meta http-equiv="expires" content="600; URL=http://meineseite.de/index.php">

Danke
glupto

  1. Hallo,

    Hallo, bisher hatte ich auf meiner Seite mit der Ausgabe zahlreicher feeds ein automatisches reload eingestellt durch:
    <meta http-equiv="refresh" content="600; URL=http://meineseite.de/index.php">

    bist du ein Mitarbeiter vom nethit Marktservice? Falls nicht, dann verwende bitte nicht die Domain meineseite.de, die denen gehört, sondern eine der dafür vorgesehenen Beispieldomains.

    Das führt aber dazu, dass bei den Nutzern je nach Browser-Einstellung aus dem Cache ein alter Stand geladen wird.

    Ja, das ist ein altes Problem. Manche Browser -allen voran der IE- cachen sehr aggressiv und nehmen bevorzugt die alte Version aus dem Cache, wenn man sie nicht zu etwas anderem zwingt. "Richtig" korrigieren kann man das in den Browser-Einstellungen, aber das müsste dann jeder Nutzer tun. Also keine brauchbare Lösung.

    Als Anbieter hast du zwei Möglichkeiten.

    Entweder du sorgst dafür, dass die Ressource mit HTTP-Headern ausgeliefert wird, die dem Browser nahelegen, das Dokument nicht oder nur für sehr kurze Zeit zu cachen (Expires, Cache-Control). Das funktioniert aber nicht zuverlässig, da ein Browser diese Empfehlungen nicht beachten *muss*.

    Oder du hängst bei jedem Reload einen zufällig gewählten URL-Parameter an, der sich jedesmal ändert. Dann ist das aus der Sicht des Browsers jedesmal eine andere Ressource, und er *muss* sie neu vom Server anfordern.

    Ich möchte, dass nach ein paar Minuten ein "refresh" passiert, aber immer von der Originaladresse, geht das so (es lässt sich schlecht testen)
    <meta http-equiv="expires" content="600; URL=http://meineseite.de/index.php">

    Nein, denn "600; URL=http://meineseite.de/index.php" ist kein gültiger Wert für den Expires-Header. Ganz abgesehen davon, dass die Angabe als meta-Element im Dokument ja nur ein Ersatz ist und die Information eigentlich als HTTP-Header übertragen werden sollte.

    Ciao,
     Martin

    --
    Ein Patriot ist jemand, der bereit ist, sein Land gegen seine Regierung zu verteidigen.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Hi!

    <meta http-equiv="expires" content="600; URL=http://meineseite.de/index.php">

    Die Syntax für den Expires-Header ist hier beschrieben: http://de.selfhtml.org/html/kopfdaten/meta.htm#laden

    Zusätzlich könnte man notieren (das ist der neuere Header):
    <meta http-equiv="Cache-Control" value="no-cache">

    »http-equiv« steht für HTTP-Äquivalent, d.h. diese Meta-Tags sind nur ein schlechter Ersatz für echte HTTP-Header. Echte HTTP-Header kannst du in PHP mit header() setzen:

    header('Expires: 0');  
    header('Cache-Control: no-cache');
    

    Diese Aufrufe müssen vor sämtlicher HTML-Ausgabe stehen.

    Viele Grüße
    Mathias

    1. Danke für die schnelle Antwort,

      habe jetzt da in den "echten" header geschrieben:

        
      header('Expires: 600');  
      header('Cache-Control: no-cache');  
      
      ~~~>  
        
      Wenn ich es richtig verstanden habe, müsste es doch so reichen oder? Auch für den automatischen refresh?  
        
      Ist es sinnvoll, dann auch zusätzlich noch die ANgaben:  
       ~~~html
      <meta http-equiv="Cache-Control" value="no-cache">  
      <meta http-equiv="expires" content="600; URL=http://testseite.de/index.php">  
      
      

      zu schreiben?

      Gruß und Dank
      Hi!

      <meta http-equiv="expires" content="600; URL=http://meineseite.de/index.php">

      Die Syntax für den Expires-Header ist hier beschrieben: http://de.selfhtml.org/html/kopfdaten/meta.htm#laden

      Zusätzlich könnte man notieren (das ist der neuere Header):
      <meta http-equiv="Cache-Control" value="no-cache">

      »http-equiv« steht für HTTP-Äquivalent, d.h. diese Meta-Tags sind nur ein schlechter Ersatz für echte HTTP-Header. Echte HTTP-Header kannst du in PHP mit header() setzen:

      header('Expires: 0');

      header('Cache-Control: no-cache');

      
      >   
      > Diese Aufrufe müssen vor sämtlicher HTML-Ausgabe stehen.  
      >   
      > Viele Grüße  
      > Mathias
      
      1. header('Expires: 600');
        header('Cache-Control: no-cache');

        
        >   
        > Wenn ich es richtig verstanden habe, müsste es doch so reichen oder?  
          
        Zum Verhindern des Cachings: Ja, die HTTP-Header reichen aus.  
          
        Der automatische Reload hat damit aber nichts zu tun.  
          
        
        > Auch für den automatischen refresh?  
          
        Das sollte besser per Meta-Tag erfolgen. Es heißt zwar http-equiv="Refresh", aber im HTTP-Standard ist kein Refresh-Header definiert. Die Browser werten den Meta-Tag trotzdem aus. (Vielleicht auch einen entsprechenden HTTP-Header, aber das ist untypisch und ich würde es nicht darauf ankommen lassen.)  
          
        Grüße,  
        Mathias