Moin Moin!
<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");steht momentan drin und tut sein zweck nicht, cashen wird nciht verhindert.
Das ist längst nicht alles, was man Browsern in Sachen Cache vor die Füße werfen muß, damit sie kooperieren. Und außerdem können Browser auch noch beschließen, dass sie Cache-Control mal völlig ignorieren und stattdessen eigene Heuristiken benutzen. Insbesondere, wenn der Cache-Control-Header aus Browsersicht Unsinn ist. (RFC2616 Kapitel 14.9 definiert, was sinnvoll sein sollte.)
Meine Anwendungen benutzen folgende Fallunterscheidungen: Für HTTP/1.0 gibt es einen veralteten Expires-Header und ein "Pragma: nocache". Für HTTP/1.1 bekommen alle Browser bis auf den IE "Cache-Control: no-cache, must-revalidate, proxy-revalidate". Der IE (erkannt am "IE" und am fehlenden "Opera" im User-Agent Header, pfui!) versteht das nicht, und bekommt stattdessen "Cache-Control: no-store". Pragma und Expires bekommen HTTP/1.1-Browser NICHT.
Mit dem IE 7 habe ich das bislang nicht getestet (andere Leute aber wohl schon), und wer HTTP/0.9 benutzt, hat Pech gehabt. Proxies, die den User-Agent-Header fälschen, werden mit diesem Algorithmus und dem IE Probleme machen.
Kleines Extra: Wenn Du einen Expires-Header sendest, MUSST Du auch einen Date-Header senden.
Alexander
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".