Caching Trick mit mod_rewrite

Smalltalk
Antworten
Benutzeravatar
Rebell
Beiträge: 997
Registriert: 14.01.2003 20:36:53
Wohnort: Dresden

Caching Trick mit mod_rewrite

Beitrag von Rebell » 26.08.2004 11:36:02

Hallo.

Ich hab ne wichtige Frage:
Die Seite http://www.nubaskets.de wird über ein Redaktionssystem dynamisch erzeugt. Dabei werden Bilder von einem Programm angefragt (dem sog. Ressourcenmanager res.x4) Wenn ihr euch die URL eines Bildes anseht, sieht man wie mod_rewrite funktionieren soll. Sie ist statisch und wird via mod_rewrite in ein POST Kommando mit Parametern umgewandelt. Das .jpg ist nur dran geheftet, damit der Browser denkt es handelt sich um ein Bild.

Meine Problem: Wie es aussieht cached der Browser die Bilder nicht, sondern lädt sie ständig neu. Ich habe den Trick angewandt um genau das zu beeinflussen. Kriegt man irgendwie raus ob der Browser Bilder cached oder ob er sie komplett neu vom Server bezieht?

Mir egal welcher Browser.
come to daddy, windowlicker!
get m:ke - http://get-mike.de

Benutzeravatar
feltel
Webmaster
Beiträge: 10366
Registriert: 20.12.2001 13:08:23
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Leipzig, Germany
Kontaktdaten:

Beitrag von feltel » 26.08.2004 11:52:00

Die Logfiles des Webservers sollten darüber auskunft geben. Eine weitere Möglichkeit wäre das Plugin HTTP-Liveheader für den Firefox-Browser.

Benutzeravatar
Rebell
Beiträge: 997
Registriert: 14.01.2003 20:36:53
Wohnort: Dresden

Beitrag von Rebell » 26.08.2004 13:34:10

Problem war folgendes:

1. Der Resmanager gab den Header "Last-Modified" nicht mit. Der muss sein, damit der Browser überhaupt cached. Die Zeitangabe steht weiter unten, zusammen mit den anderen Angaben. Wichtig ist das 24-Stunden Format.

2. Wenn der Browser ein Bild gecached hat, fragt er beim Request mit "If-Modified-Since". Dieses Datum muss man abfangen und mit dem Änderungsdatum der Datei vergleichen.
Zur Sicherheit vorher in Timestamp umwandeln. Wenn Timestamp der Datei kleiner ist als der Angefragt Timestamp wird ein Header "HTTP/1.x 304 Not Modified" ausgegeben". Der Bowser weiß dass er die neuste Version hat.

3. Ansonsten gibt der Resmanager die Datei zurück. Als Header sollte er folgendes zurückgeben:

Code: Alles auswählen

Last-Modified: Thu, 26 Aug 2004 13:14:22 CEST

Accept-Range: bytes

Content-Length: 22267

Content-Type: image/jpeg


Sonst cached er nicht.

Wichtige Hinweise:
Das Programm zur Dateirückgabe darf keine Session eröffnen. In Sessions wird prinzipiell nicht gecached (macht zumindest Firefox so).

Fehler in PHP strtotime-Funktion.
Funktion gibt -1 zurück wenn in der Datums-Angabe "CEST" als Zeitzone steht. CEST muss via preg_replace in "+0200" umgewandelt werden.

Im IE scheint das Ganze nicht geklappt zu haben. Da ich keine Möglichkeit hab den Header zu überprüfen. Wenn jemand weiß was der IE als Request-Header sendet, soll er sich mal bitte hier melden.

Ansonsten such ich noch ein Programm was ähnlich ist wie Http Live Headers für Firefox.

Grüße,
Mike
come to daddy, windowlicker!
get m:ke - http://get-mike.de

Antworten