Moin!
Ich habe mit folgenden headern, das Caching geregelt:
Also eher das Nicht-Caching.
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: Mon, 26 Jul 1997 05:00:00 GMT");header("Cache-Control:");
header("Pragma: no-cache"); // HTTP/1.0Jedoch gibt es glaube ich für Cache-Control unterschiede, also müsste ich auch zwischen 1.0 und 1.1 unterscheiden. Wie geht das?
Da kommt dir die Praxis zugute: Die Clients sind tolerant im Empfang, eine Fallunterscheidung ist nicht notwendig. Die RFC 2068 sagt dazu:
" HTTP/1.1 clients SHOULD NOT send the Pragma request-header. HTTP/1.1
caches SHOULD treat "Pragma: no-cache" as if the client had sent
"Cache-Control: no-cache". No new Pragma directives will be defined
in HTTP."
Und die Bedeutung von "SHOULD" wird erklärt als:
" SHOULD
This word or the adjective "recommended" means that there may
exist valid reasons in particular circumstances to ignore this
item, but the full implications should be understood and the case
carefully weighed before choosing a different course."
Des weiteren: Gibt es ein Expires-Datum, das besagt "läuft nie ab"?
Ja. Einfach keinen Expires-Header senden.
Wo gibt es eine übersicht, was ich für Cache-Control und Pragma alles setzten kann?
Das steht in der HTTP-RFC 2068 aufgezählt drin. http://www.faqs.org/rfcs/rfc2068.html
Ich habe irgenetwas gelesen, dass man das neue Abrufen mit einem 304 verhindern kann, wenn schon gecached ist?
Nein, das Abrufen kannst du nicht verhindern, denn das macht der Client ja gerade, um zu erfahren, ob es eine neuere Seitenversion gibt, oder nicht. Falls ja, lieferst du die normal aus (Status 200). Falls nein, schickst du Status 304 "Not modified".
Damit ein Client aber überhaupt nachfragen kann, benötigt die Seite zwingend mindestens eine Last-modified-Angabe. Ebenfalls gut wäre ein ETag. Erst dann kann der Client die erwünschten "Conditional-Requests" senden, in denen Header drinstehen, die bestimmen, welche Bedingungen vom Server für die Auslieferung beachtet werden müssen.
Für die simpelste Anwendung bei Last-Modified sendet der Client "If-Modified-Since" plus Datum des früher empfangenen Last-Modified.
Wenn du grundsätzlich verhindern willst, dass Clients zwischendurch nachfragen, sende einen Expires-Header mit. Bis zum Ablauf der dort angegebenen Zeit wird der Client dann üblicherweise nicht mehr fragen. Danach dann wieder "conditional".
- Sven Rautenberg
"Love your nation - respect the others."