fips: Einstellung: Browser Cache

Hallo,

ich kenne mich mit Server Einstellungen sehr wenig aus, deswegen bitte ich um eine einfach Antwort.

Ich habe gemerkt, dass eine Seite mit Bildern, die ich gemacht habe auf einem Server schneller geladen wird als auf einem anderen, weil bei dem einen Server die Bilder nicht neu übertragen werden, bei der anderen schon, d.h.

in meinem Browser ist eingestellt, dass die Seite bei jedem Zugriff neu geladen werden soll, allerdings macht er das bei dem einen Server nicht (was ich auch für sinnvoll halte).

Meine Frage:

Ist es also möglich bei einem Server einzustellen, ob er die gleiche Datei (Bild) nicht nocheinmal sendet, sondern irgendwie aus dem Cache holt, obwohl beim Browser etwas anderes eingestellt.

Beste Grüsse
fips

  1. Ist es also möglich bei einem Server einzustellen, ob er die gleiche Datei (Bild) nicht nocheinmal sendet, sondern irgendwie aus dem Cache holt, obwohl beim Browser etwas anderes eingestellt.

    Jein. Grundsätzlich kann der Server nur das machen, was der Browser von ihm verlangt. Hast Du im Browser Option X geschaltet, muß der Server entsprechend handeln.

    Es gibt allerdings eine ganze Latte von Möglichkeiten, wie der Browser festlegen kann, ob sich eine Übertragung lohnt oder ob er die Datei aus seinem (Browser, nicht Server!) Cache holt.
    Beispielsweise könnte ein Server zusammen mit dem Bild die Information senden, wann die Bilddatei zuletzt geändert wurde ("Last-Modified", http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.29). Bei der nächsten Abfrage kann der Browser dann statt einer normalen Abfrage eine bedingte Abfrage schicken, die nur ausgeführt wird, wenn sich die Datei seit besagtem Zeitpunkt geändert hat ("If-Modified-Since", http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.25, schlägt sich in der Statistik als Antwort "304 Not modified" nieder, http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5).

    Falls Du es Dir zutraust, kannst Du mal ein Programm namens "telnet" aufrufen und eine Verbindung zu einem Server herstellen (Anschluss 80 anwählen). Der Server meldet sich nicht extra, sobald also die Verbindung hergestellt ist, gibst Du einfach in das leere Fenster folgende drei (drei!) Zeilen ein:

    HEAD /pfad/zu/deinem/bild.png HTTP/1.0
      Host: www.example.com

    Beachte, daß nach der Host:-Zeile eine Leerzeile folgen muß, am Ende also zweimal Return drücken! Statt www.example.com gibst Du natürlich die Adresse des Servers ein, hinter HEAD den Pfad zum Bild. Die URL, die Du für obigen Fall im Browser eingeben würdest, wäre "http://www.example.com/pfad/zu/deinem/bild.png".

    Du solltest in den telnet-Optionen "Lokales Echo" einschalten, sofern vorhanden, ansonsten mußt Du blind tippen - funktioniert auch, erfordert aber etwas Konzentration :)

    Hast Du die drei Zeilen richtig eingetippt, erhältst Du etwas in der folgenden Richtung:

    HTTP/1.1 200 OK
      Date: Thu, 27 Mar 2003 10:19:18 GMT
      Server: Apache/1.3.27 (Unix)
      Cache-Control: max-age=864000
      Expires: Sun, 06 Apr 2003 10:19:18 GMT
      Last-Modified: Wed, 05 Jun 2002 10:07:40 GMT
      ETag: "100913-60b-3cfde2ec"
      Accept-Ranges: bytes
      Content-Length: 1547
      Connection: close
      Content-Type: image/png

    Das sind die sogenannten Kopfdaten ("header"), die weitere Informationen zu den eigentlichen Daten enthalten. Sie werden in der einen oder anderen Form jedem angefragten Objekt mit auf die Reise zum Browser gegeben.

    Steht eine Last-Modified:-Zeile in der Antwort, könnte Dein Browser beim nächsten Mal obigen Mechanismus mit If-Modified-Since in Gang setzen (mit ETag funktioniert es übrigens ähnlich).

    Probiere dasselbe mit dem anderen Server aus und vergleiche die Antworten. Vielleicht ergibt sich ja ein Hinweis.

    Gruß,
      soenk.e

    1. Vielen Dank für deine ausführliche und kompetente Antwort. Ich muss es jetzt erstmal testen.

      Mit telnet habe ich noch nichts gemacht. Gibts da irgendwo ein Tutorial?

      Besten Dank nochmals.

      Beste Grüsse
      fips