Jessy: Aktualisieren der im CACHE gespeicherten Webseite

Hallo Zusammen,

Ich habe eine sehr triviale Frage, auf die ich leider noch keine Antwort gefunden habe!
Ich habe eine Webseite, bei der sich des öfteren etwas ändert (Text, Bilder etc.)! Kommt nun ein Besucher ein wiederholtes mal auf meine Seite, zeigt doch der Internet-Explorer gar nicht diese Neuerungen an, da er doch noch die Daten aus dem Cache vom ersten Besuch zieht!? Ist zumindest bei meinen Tests so! Muss erst im Explorer aktualisieren drücken, damit die neuen Daten angezeigt werden! Aber das mache ich ja auch nie wenn ich "surfe"!?

Ist dem wirklich so oder hab ich da einen Denkfehler? Wie kann ich meinem Besucher die aktuellen Daten zugänglich machen?

Vielen Dank,

MfG, Jessy

  1. Liebe(r) Jessy,

    um den Cache zu umgehen müsste sich die URL der Seite ändern. Aus z.B. http://example.org müsste http://example.org?time=123456 werden, wobei der "time"-Parameter von einem serverseitigen Script jedesmal auf die aktuelle Systemzeit (das sind Millisekunden) aktualisiert wird.

    Eine andere Lösung wäre, dass man den Server entsprechende HTTP-Header mitsenden lässt, die dem Browser explizit verbieten, die Seite aus dem Cache zu laden - aber ob sich gerade der IE daran hält...

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hui, da kamen ja doch viele Antworten!
      Dank eurer "diskussion" hatte ich eine Vorlage, um bei google zu suchen und wurde doch glatt wieder bei selfhtml fündig ;)

      Hab es jetzt mit folgendem "Codeschnipsel" umgesetzt:

      <meta http-equiv="expires" content="0">

      Danke euch,

      Gruß, Jessy

      1. (Hallo|Hi(ho)|Mahlzeit) Jessy,

        Hab es jetzt mit folgendem "Codeschnipsel" umgesetzt:

        <meta http-equiv="expires" content="0">

        Dir ist aber hoffentlich klar, dass dieses Meta-Tag nur zum gewünschten Verhalten führt,
        wenn der Webserver entsprechend konfiguriert ist?
        Ist das der Fall, muss er jede einzelne HTML-Datei erst auf solche Einträge prüfen
        und die dazu passenden HTTP-Header setzen, bevor er die Datei ausliefern kann.

        Es ist meistens besser, die HTTP-Header direkt zu setzen, entweder per Server-Script
        oder bei "statischen Dateien" durch entsprechende Einträge in der Server-Konfiguration.

        Nicht-HTML-Dateien wie Bilder, Style-Sheets oder Java-Scripts kennen keine solchen Meta-Tags.

        MffG
        EisFuX

  2. (Hallo|Hi(ho)|Nabend) Jessy,

    Ich habe eine sehr triviale Frage, auf die ich leider noch keine Antwort gefunden habe!
    Ich habe eine Webseite, bei der sich des öfteren etwas ändert (Text, Bilder etc.)! Kommt nun ein Besucher ein wiederholtes mal auf meine Seite, zeigt doch der Internet-Explorer gar nicht diese Neuerungen an, da er doch noch die Daten aus dem Cache vom ersten Besuch zieht!? Ist zumindest bei meinen Tests so! Muss erst im Explorer aktualisieren drücken, damit die neuen Daten angezeigt werden! Aber das mache ich ja auch nie wenn ich "surfe"!?

    Ist dem wirklich so oder hab ich da einen Denkfehler? Wie kann ich meinem Besucher die aktuellen Daten zugänglich machen?

    Der Webserver kann einem Browser (aber auch dem Internet Explorer) sagen, wie er sich beim erneuten Anzeigen einer "Seite"
    verhalten soll:

    * Er kann ein Verfallsdatum festlegen, ab dem die im Cache abgelegten Daten als veraltet gelten. Der Browser zeigt dann bis zu diesem Datum die gecachte Version.

    * Er kann aber auch den Browser "bitten", vor dem Anzeigen doch beim Server nachzufragen, ob sich die anzuzeigende "Seite" in der Zwischenzeit geändert hat.
    Wenn alles beim Alten geblieben ist, antwortet der Server mit dem Statuscode 304 ("Not Modified") und die Kopie aus dem Browser-Cache darf noch mal ran.

    Das Ganze geschieht über diverse HTTP-Header (für Anfragen und Antworten) und lässt sich zum Beispiel mit den
    Begriffen "http expires etag "conditional get" ergoogeln. Allerdings habe ich in deutscher Sprache bisher noch nichts Übersichtliches dazu gefunden.

    MffG
    EisFuX

    1. Hallo,

      * Er kann aber auch den Browser "bitten", vor dem Anzeigen doch beim Server nachzufragen, ob sich die anzuzeigende "Seite" in der Zwischenzeit geändert hat.

      das tut der IE bei vernünftiger Einstellung der Caching-Strategie von sich aus, auch wenn ihn der Server nicht dazu einlädt. So wie jeder anständige Browser.

      Wenn alles beim Alten geblieben ist, antwortet der Server mit dem Statuscode 304 ("Not Modified") und die Kopie aus dem Browser-Cache darf noch mal ran.

      Mit eben dieser Konsequenz. Das geht übrigens auch ohne ETag; der Browser setzt im Request den HTTP-Header If-Modified-Since mit dem Timestamp des letzten Abrufs der Ressource, und der Server entscheidet anhand dieses Timestamps, ob er neuen Content oder nur einen 304-Status ausgibt.

      So long,
       Martin

      --
      "Life! Don't talk to me about life!"
        (Marvin, the paranoid android in Douglas Adams' "The Hitchhiker's Guide To The Galaxy")
      1. Hi,
        ja und wie würde man dieses Verhalten in PHP oder sonstigen Sprachen mal beispielhaft umsetzen?
        Ciao, Frank

        1. Hi,

          ja und wie würde man dieses Verhalten in PHP oder sonstigen Sprachen mal beispielhaft umsetzen?

          Conditional Request mit PHP (leider nicht als erklärender Artikel, sondern nur als kommentiertes Script).

          Gruß, Cybaer

          --
          Zweck des Disputs oder der Diskussion soll nicht der Sieg, sondern der Gewinn sein.
          (Joseph Joubert, Schriftsteller)
          1. Hallo Cybaer, vielen Dank dafür (kommentierter Code is immer das beste). Das ist doch mal was!! Ich werde es mal mit meiner C# / .net Variante vergleichen.
            Ciao und schönes Wochenende!
            Frank