Karl Heinz: Browser-Cache, Server-Cache verstehen...

Hallo,

leider verstehe ich nicht im Detail was genau Caching in Verbindung mit Webseiten zu bedeuten hat.

Ich will es einfach mal in eigenen Worten erklären, es wäre prima, wenn Ihr meine Erklärung bestätigen bzw. berichtigen könntet.

  • Angenommen Webseite A liegt bei Hoster A auf einem Server.

  • Nun rufe ich Webseite A ausgehend von meinem Firefox Browser auf. In Browsern ist ein sogenannter Browser Cache integriert. In diesem Browser-Cache werden bereits aufgerufene Ressourcen der Webseite lokal gespeichert, dass hat den Vorteil, dass bei einem erneuten Aufruf von Webseite A viele Daten aus dem Browser Cache geladen werden können, dies entlastet zum einen den Server und führt zum anderen dazu, dass die Webseite schneller geladen wird, da die Ressourcen ja teilweise lokal auf dem eigenen PC gespeichert sind.

  • Nun gibt es aber zusätzlich zum Browser-Cache auch noch den Server seitigen Server-Cache. Wird eine Webseite vom Server abgefragt so sind hierfür bei nicht statischen Seiten Datenbankabfragen notwendig. Die aus den Datenbankabfragen generierte HTML-Seite wird auf dem Server im Cache zwischengespeichert. Wird die identische Webseite nun ein weiteres mal aufgerufen, so wird auf die Datenbankabfrage auf dem Server verzichtet, es wird gleich die fertige zwischengespeicherte HTML-Seite vom Server zurückgeliefert.

Nun meine Fragen zum Thema:

  1. Habe ich das soweit korrekt erklärt?
  2. Angenommen ich leere den Browsercache niemals, dann habe ich ja immer eine veraltete Version der Webseite?
  3. Angenommen ich leere den Servercache niemals, dann habe ich ja immer eine veraltete Version der Webseite?
  4. Mit Hilfe von STRG+F5 kann ich ja die Seite neu vom Server laden, ohne das auf die Ressourcen im Browser-Cache zugegriffen wird. Trotzdem kann es aber sein das ich eine veraltete Cache-Version des Servers erhalte. Welche Möglichkeit gibt es um eine Rückmeldung vom Server zu erhalten die nicht aus dem Server-Cache stammt? STRG+F5 bezieht sich ja nur auf den Browser-Cache aber nicht auf den Server-Cache.
  5. In folgendem Artikel (https://de.wikipedia.org/wiki/Hilfe:Cache) wird etwas über sogenannte Kennisnet-Cluster in Amsterdam geschrieben. Sind das zusätzlich Cache-Server die grundsätzlich verwendet werden oder werden diese Cache-Server nur beim Aufruf von Wikipedia-Seiten verwendet?

akzeptierte Antworten

  1. Hallo,

    In folgendem Artikel (https://de.wikipedia.org/wiki/Hilfe:Cache) wird etwas über sogenannte Kennisnet-Cluster in Amsterdam geschrieben. Sind das zusätzlich Cache-Server die grundsätzlich verwendet werden oder werden diese Cache-Server nur beim Aufruf von Wikipedia-Seiten verwendet?

    Hast du den Artikel gelesen, besonders den ersten Satz, bzw. das erste Wort?

    Gruß
    Kalk

    1. Hast du den Artikel gelesen, besonders den ersten Satz, bzw. das erste Wort?

      Habe ich, demnach bezieht sich das nur auf Wikipedia.

      Hatte mal irgendwas von offiziellen, von Wikipedia unabhängigen, Cache Servern in den Niederlanden gelesen, dachte die wären das und beziehen icht nicht explizit auf Wikipedia. Da lag ich wohl falsch.

  2. Hallo Karl Heinz,

    1. Habe ich das soweit korrekt erklärt?

    Ich denke ja.

    2. Angenommen ich leere den Browsercache niemals, dann habe ich ja immer eine veraltete Version der Webseite?

    Darauf hast du keinen Einfluss. Du kannst den Browsercache höchstens früher leeren, als es der Seitenbetreiber vorsieht.

    3. Angenommen ich leere den Servercache niemals, dann habe ich ja immer eine veraltete Version der Webseite?

    Ja, du würdest dann immer veraltete Seiten ausliefern. Das war bei uns im alten Forum bzw. Archiv der Fall. Die Archivseiten wurden angefordert, ausgeliefert und dann gespeichert. Änderungen am Inhalt kamen selten vor, führten aber zu einem Löschen der gespeicherten Version. Änderungen am HTML-Überbau oder am CSS sah man erst dann, wenn man den Cache gelöscht hat.

    Genauso funktioniert es heute auch bei vielen Wordpress-Installationen.

    3. Mit Hilfe von STRG+F5 kann ich ja die Seite neu vom Server laden, ohne das auf die Ressourcen im Browser-Cache zugegriffen wird. Trotzdem kann es aber sein das ich eine veraltete Cache-Version des Servers erhalte.

    Ja.

    Welche Möglichkeit gibt es um eine Rückmeldung vom Server zu erhalten die nicht aus dem Server-Cache stammt?

    keine Ahnung, ich glaube, wenn der Seitenbetreiber nicht will, dann keine.

    Bis demnächst
    Matthias

    --
    Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
    1. Welche Möglichkeit gibt es um eine Rückmeldung vom Server zu erhalten die nicht aus dem Server-Cache stammt?

      keine Ahnung, ich glaube, wenn der Seitenbetreiber nicht will, dann keine.

      Wie habt Ihr das hier im Forum gelöst? Hier gibt es ja auch einen Server-Cache. Wo bzw. wie habt Ihr eingestellt wie häufig der Server-Cache gelöscht wird?

      PS: Ich habe gerade auf antworten geklickt. Ich sehe leider nur einen leeren Beitrag ohne das was vorher geschrieben wurde. Ist das ein Bug im Forum? Kürzlich ging das noch tadellos?

      1. Hallo Karl Heinz,

        PS: Ich habe gerade auf antworten geklickt. Ich sehe leider nur einen leeren Beitrag ohne das was vorher geschrieben wurde. Ist das ein Bug im Forum? Kürzlich ging das noch tadellos?

        Schau mal in deinen Einstellungen nach. Es ist seit kurzem konfigurierbar, welche Antwortbuttons gezeigt werden.

        • Antworten - (das ist neu ohne Zitat, weil TOFU und Co. hier unerwünscht sind)
        • Antworten mit Zitat
        • beide
        • falls du die Reihenfolge tauschen möchtest, SELFHTML:Forum/Tipps und Tricks

        Bis demnächst
        Matthias

        --
        Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
        1. Prima, danke :-)

      2. Hallo

        Da hier immer wieder unnötig Vollzitate fabriziert wurden, wurde das Zitat-auf-Knopfdruck als Vorgabe eingeführt. Um aus dem Vorposting zu zitieren benutze bitte den Button „Zitat einfügen“ oberhalb des Eingabefelds.

        Tschö, Auge

        --
        Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
        Toller Dampf voraus von Terry Pratchett
  3. Tach!

    • Nun gibt es aber zusätzlich zum Browser-Cache auch noch den Server seitigen Server-Cache.

    Den gibt es nur, wenn man ihn in irgendeiner Weise aufsetzt. In einfachen Installationen gibt es keinen. Solche Caches lohnen sich erst bei größeren Geschichten. Vielfach sind Caching-Mechanismen auch nur in den Anwendungen implementiert, an die der Webserver Requests durchreicht, nicht aber im Webserver selbst.

    Wird eine Webseite vom Server abgefragt so sind hierfür bei nicht statischen Seiten Datenbankabfragen notwendig. Die aus den Datenbankabfragen generierte HTML-Seite wird auf dem Server im Cache zwischengespeichert.

    Wie gesagt, das ist nicht zwangsläufig der Fall. Zugriffe zu PHP-Scripten werden üblicherweise immer wieder neu von PHP abgehandelt. Der Webserver kann nicht wissen, ob PHP neue Daten liefern würde oder nicht. (Diese Aussage gilt sinngemäß auch für andere im Webserver eingebettete Application-Mechanismen.)

    Wird die identische Webseite nun ein weiteres mal aufgerufen, so wird auf die Datenbankabfrage auf dem Server verzichtet, es wird gleich die fertige zwischengespeicherte HTML-Seite vom Server zurückgeliefert.

    Es werden URLs aufgerufen. Das müssen nicht nur Webseiten sein, es gibt auch jede Menge andere Inhalte.

    Angenommen ich leere den Browsercache niemals, dann habe ich ja immer eine veraltete Version der Webseite?

    Theoretisch ja, praktisch verwaltet das der Browser für dich und beachtet dabei auch Empfehlungen der Serverbetreiber, wie lange die Daten gültig sind.

    Angenommen ich leere den Servercache niemals, dann habe ich ja immer eine veraltete Version der Webseite?

    Das kommt darauf an, wie die Anwendungen ihre Caches verwalten. Da sind üblicherweise Logiken dahinter, die bei sich ändernden Daten eine Invalidisierung des Inhaltes bewirken, woraufhin beim nächsten Request die Daten im Cache neu erzeugt werden.

    Vorgeschaltete Caches würden vielleicht dieses Problem haben. Aber auch die konfiguriert man nicht so, dass veraltete Daten ausgeliefert werden.

    Mit Hilfe von STRG+F5 kann ich ja die Seite neu vom Server laden, ohne das auf die Ressourcen im Browser-Cache zugegriffen wird. Trotzdem kann es aber sein das ich eine veraltete Cache-Version des Servers erhalte.

    Kann sein, muss aber nicht. Der Browser wird in dem Fall dem Server nicht sagen, dass er bereits die Version vom Zeitpunkt X kennt, so dass der Server nicht antworten kann, dass er nichts neues habe.

    Welche Möglichkeit gibt es um eine Rückmeldung vom Server zu erhalten die nicht aus dem Server-Cache stammt?

    Da es "den Server-Cache" nicht gibt, ist die Frage nicht allgemeingültig beantwortbar.

    dedlfix.

    1. Angenommen ich leere den Browsercache niemals, dann habe ich ja immer eine veraltete Version der Webseite?

    Das hängt vom Browser und den Seitendaten ab. Der Browser wird nicht unendlich viele Daten vorhalten, der Speicherplatz ist begrenzt. Selten genutzte und/oder alte Daten werden daher automatisch aus dem Cache gelöscht.

    Vor allem aber kann jedem Objekt, das per HTTP ausgeliefert wird, ein Gültigkeitszeitraum mitgegeben werden, Stichworte dazu sind Cache-Control, Expires, Last-Modified, ETag und dergleichen. Der Seitenbetreiber sollte wissen, wie lange seine Daten "haltbar" sind und entsprechende Angaben machen.

    Ein allgemeines Wort zum Mechanismus: Erhält ein Browser ein Objekt mit einem Verfallsdatum (Expires), ruft er bis dahin das Objekt entweder gar nicht mehr ab oder nur sehr selten. Objekte ohne Cache-Angaben werden bei jeder Nutzung mit dem Server abgeglichen. Im Detail ist beides aber browser- und einstellungsabhängig.

    Für jedes im Cache vorhande Objekt stellt der Browser des weiteren nur bedingte Anfragen, d.h. er sendet in seiner Anforderung gleich eine Information über den Status des Objektes in seinem Cache mit (üblicherweise den letzten Abrufzeitpunkt (If-Modified-Since) oder eine Prüfsumme (If-None-Match)). Der Server antwortet darauf entweder mit einem kompletten Objekt oder nur mit der kurzen Antwort, dass sich nichts geändert hat (304 Not Modified).

    1. Angenommen ich leere den Servercache niemals, dann habe ich ja immer eine veraltete Version der Webseite?

    Der Seitenbetreiber sollte wissen, wie lange seine Daten "haltbar" sind. Einen serverseitigen Cache aufzusetzen ohne dafür zu sorgen, dass die Daten in Ordnung sind, ist kompletter Unsinn.

    Welche Möglichkeit gibt es um eine Rückmeldung vom Server zu erhalten die nicht aus dem Server-Cache stammt?

    Gar keine. Du solltest vielmehr davon ausgehen, dass der Serverbetreiber sich die Sache gut überlegt hat und besser als du weiss, welche Daten er dir aushändigen möchte.

    1. Hallo Reginald, @Karl Heinz

      Vor allem aber kann jedem Objekt, das per HTTP ausgeliefert wird, ein Gültigkeitszeitraum mitgegeben werden, Stichworte dazu sind Cache-Control, Expires, Last-Modified, ETag und dergleichen. Der Seitenbetreiber sollte wissen, wie lange seine Daten "haltbar" sind und entsprechende Angaben machen.

      Bei Google Developers ist der Mechanismus gut erklärt, wie ich finde.

      Da du ja vorgestern schon die Entwicklungswerkeuge des Browsers benutzt hast, dachte ich mir: Das Ganze kann man auch mal mit einem entsprechend konfigurierten Webserver ausprobieren (scheint zumindest bei einem unter Ubuntu installierten Apache Voreinstellung zu sein, den kannst du dir unter Mint ja auch mal installieren):

      1. Zwei Grafiken hochladen (hier test.jpg und test2.jpg) und ein HTML-Dokument, das beide referenziert (test2.jpg ist auskommentiert): <!doctype html><html><img src="test.jpg" alt=""><!--<img src="test2.jpg" alt="">-->
      2. Dokument im Browser (via http!) laden:
        HTML-Dokument und Grafik werden geladen, beide Male HTTP-Statuscode 200
      3. Im HTML-Dokument <img src="test2.jpg" alt=""> auskommentieren und dann die Seite im Browser neu laden:
        test.jpg wird mit 304 quittiert, test2.jpg mit 200er ausgeliefert

      Wie du an den HTTP-Headern siehst, wird bei einer bereits heruntergeladenen Datei nur gefragt, ob sie sich geändert hat:
      Etag, If-Modified-Since

      Du siehst hier sehr schön den Token (Etag, If-None-Match) und die Uhrzeit des ursprünglichen Abrufens (If-Modified-Since).

      Dieses Spielchen kann man noch weiter spielen:

      Fokus auf die Adressleiste und dann Enter drücken – alles kommt aus dem Cache:

      Neu laden (F5) – alles wird mit 304 Not Modified quittiert:

      Neu laden erzwingen (Strg und F5) – alles wird neu abgefragt:

      Einfach mal mit den Entwicklungswerkzeugen des Browsers spielen 😀

      Gruß
      Julius