Hallo,
<script type="text/javascript" src="script.php?id=test"></script>
header('Content-type: application/x-javascript');
(Nur nebenbei bemerkt ist der richtige MIME-Type application/javascript!)
Wenn ich mir das ganze im Firebug anschaue, dann stelle ich fest, dass "normal" referenzierte Quellen, wie z.B. Bilder oder CSS Dateien gecachet werden. Der Browser schickt sogar immer noch Header wie "If-Modified-Since" mit. Das tut er bei meiner script.php nicht. Dort steht kein "If-Modified-Since" in den Request-Headern... warum?
PHP senden von allein keinen Header ETag (vgl. Apache-Dokumentation: FileEtag). Der ETag-header beinhaltet eine sehr wahrscheinlich eindeutige Referenz einer angeforderten Resource bezüglich ihrer inhaltlichen Veränderung. Der bei der erstmaligen Anfrage dem Browser übergebene Wert dieses Headers wird bei einer erneuten Anfrage an die selbe Resource im Request-Header If-None_Match dem Server zur Überprüfung mitgegeben.
Mit dem Request-Header If-Modified-Since sieht ähnlich aus. Dieser beinhaltet als Prüfwert für den Server den Inhalt des Resopnse-Header Last-Modified der ersten Anfrage an eine Resource. Da PHP auch diesen Header nicht von alleine setzt, hat der Browser keine Möglichkeiten Konditionen zu stellen, um eine überflüssige Auslieferung der Resource zu verhindern.
Weiterhin steht auch in den Response-Headern: Pragma: no-cache. Und ein Expires Datum in der Vergangenheit.
Wo kommt [die] her?
Wenn Du sie nicht in Dein Script durch header()
hineingesetzt hast, gucke bitte mittels phpinfo(4) ob durch die Konfigurationsanweisung auto_prepend_file ein Script bestimmt wurde, was vor jedem Deiner Scripte ausgeführt wird!
Ich würde gerne erreichen, dass der Browser mein skript.php?id=test cachet!
Sieh dir die Funktion header(), Expires, Cache-Control und Pragma an!
Und dass er für diese Resource ein "If-Modified-Since" Header an den Server schickt. Dort möchte ich dann an Hand des Datums entscheiden, ob der Browser ein 304 Status Code (not modified) zurückbekommt, oder eben eine neue Version.
Was steht Dir einer Verarbeitung der Request-Header, die Dir in der globalen Variable $_SERVER
zu Verfügung stehen, im Wege?
Gruß aus Berlin!
eddi
Diese Nachricht ist made in Rixdorf und wurde mittels 100% recycelter Elektronen verfasst.
Und der Strom? Äh - kommt aus der Steckdose! :)