FB18 - Das Forum für Informatik

fb18.de / Off-Topic / Hard- und Softwarefragen

HTTP Cache-Verhalten

HTTP Cache-Verhalten 2007-08-18 16:40
Da:Sourcerer
Folgende Situation: Ich schraube gerade an einer Seite herum, die monatlich 80.000 Page Impressions hat. Der Großteil der Seite wird dynamisch generiert. Dazu habe ich mir dann mal gedacht, dass ich ja abfragen kann, wann eine Seite das letzte mal aktualisiert wurde und dem Client ggf. via HTTP Satuscode 304 mitteilen, dass sich seit dem letzten Laden nichts geändert hat um so einiges an Traffic und DB-Belastung einzusparen.

Nun war's nicht weiter schwer, dem Client einen ETag- und Last-Modified-Header mitzugeben und entsprechend die Request-Header If-None-Match bzw. If-Modified-Since auszulesen und zu verarbeiten. Nur: Einige Browser *hust*msie*hust* scheinen sich dann generell lieber ihres Caches zu bedienen und fragen erst gar nicht ab, ob die Seite sich geändert hat.

Ich habe jetzt ein wenig herumexperimentiert, komme aber zu keinem befriedigenden Ergebnis. Inzwischen gebe ich dem Client folgendes noch mit auf den Weg:
Expires: -1 Cache-Control: must-revalidate, proxy-revalidate, private, max-age=0, s-maxage=0, post-check=0, pre-check=0
Irgendwelche Ideen, wie das noch zu retten ist? ich stehe echt kurz davor, den Kram einfach sein zu lassen.

RE: HTTP Cache-Verhalten 2007-08-18 19:26
Tzwoenn
Probier mal
Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache

RE: HTTP Cache-Verhalten 2007-08-18 20:04
Da:Sourcerer
Geil-O-Matik. Vielen Dank!

RE: HTTP Cache-Verhalten 2007-08-19 01:35
joda_der_weise
Auch wenn Deine Frage nicht in die Richtung geht, als kleine Idee:

Wenn Du schon eine Abfrage machst ob sich was aktualisiert hat und Du "nur" die Db entlasten willst, könntest Du auch über einen eigenen Cache die Seite fertig generiert im Grunde statisch speichern und anstatt der dynamischen ausliefern.

RE: HTTP Cache-Verhalten 2007-08-19 12:10
Da:Sourcerer
Richtig. Sowas hatte ich auch mal angefangen über PEAR::Cache_Lite. Mein Problem war da dann ähnlich wie hier: Das gute Stück war etwas zu eifrig.

RE: HTTP Cache-Verhalten 2007-08-19 12:15
joda_der_weise
Richtig. Sowas hatte ich auch mal angefangen über PEAR::Cache_Lite. Mein Problem war da dann ähnlich wie hier: Das gute Stück war etwas zu eifrig.

Hmm,
bei der speziellen Anwendung hätte ich vielleicht eher was eigenes geschrieben.
Ganz simples Beispiel:

Erstellung des Cachefiles per Cronjob alle 5 Minuten.
Der Cron macht dann im Grunde nichts anderes als die Seite anstatt auszugeben in eine Datei zu schreiben.
(Im Grunde ein Zweizeiler:

#! /bin/bash
php-cgi /pfad_zur_alten_dynamischen_datei/dynamische_datei.php >> statischer_datei.html
)

und wenn das klappt machst Du mit einem Rewrite nur die Umlenkung und schaust Dir erstmal an ob das was bringt…


Übrigens zu Pear und Deinem header-problem:

http://pear.php.net/package/HTTP_Header

RE: HTTP Cache-Verhalten 2007-08-19 12:21
Da:Sourcerer
Ich hatte so schon überlegt, ob ich von Seiten der Anwendung nicht einfach alles in Dateien stopfe. Das gestaltet sich aber gerade mit Art und Weise schwierig, mit der die Template-Engine aufgerufen wird.