Sönke Tesch: Einstellung: Browser Cache

Beitrag lesen

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