Hallo Freunde des gehobenen Forumsgenusses,
Ich habe eine Klasse in PHP geschrieben, die passende Last-Modified- und ETag-Header verschickt und Requests mit IF-Modified-Since- oder If-None-Match-Header korrekt mit 304 Not Modified beantwortet.
Dazu übernimmt der Konstruktor den Inhalt des Dokumentes als Parameter, bildet einen Hash und trägt die URL, den Hash und die aktuelle Uhrzeit in eine SQL-Tabelle ein:
create table if not exists VCC_data (
url varchar(255) primary key,
etag varchar(72) not null,
last_modified datetime not null
);
Außerdem werden eben ETag- und Last-Modified-Header gesetzt.
Wenn nun diese URL ein zweites Mal aufgerufen wird bildet die Software erneut den Hash des Inhaltes und vergleicht ihn mit dem in der Datenbank. Wenn die beiden nicht identisch sind wird das Datum in der Tabelle auf now() gesetzt und der neue Hash eingetragen (die Programmlogik steckt im Konstruktor von VCacheController.class.php).
Soweit so gut, nur in der Praxis funktioniert das irgendwie nicht ganz so wie ich mir das vorgestellt habe:
Wenn ich mit Curl die Produktiv-Seite abrufe bekomme ich immer als Last-Modified den Inhalt des Date-Headers, bei den Unterseiten aber nicht, und das obwohl sich der Zeistempel in der Datenbank nirgends geändert hat, lokal habe ich das Problem nicht.
Könntet ihr euch das mal angucken:
http://alexanderbrock.de/ ff.
Die Software gibs hier:
VCacheController-0.1beta unter GPL, wenn das alles mal richtig funktioniert schreibe ich da noch eine Benutzerdokumentation zu, im Moment gibt es nur PHPDockumentator-Kommentare.
Gruß
Alexander Brock