Meine CSS-Datei ist eigentlich eine PHP-Datei, die mit Inhaltstyp text/css
serviert wird, so dass ich PHP-Variablen in dieser Datei verwenden kann. style.php
sieht wie folgt aus:Cache-Header für dynamische CSS (generiert über PHP)
<?php
header('Content-Type: text/css');
$bgColor = '#000';
?>
body { background:<?php print $bgColor; ?>; }
Es funktioniert wie erwartet, aber ich bin ein bisschen besorgt, wenn der Browser die dynamisch erstellte CSS-Datei zwischenspeichert.
Beim Betrachten der Anfragen in Firebug scheint mir, dass der Browser style.php
jedes Mal neu geladen wird, wenn ich die Seite neu lade.
Ich habe bereits versucht, diesen Cache-Header hinzuzufügen:
header('Cache-control: must-revalidate');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 60 * 60 * 24) . ' GMT');
Aber kein Glück. Die Datei wird immer noch geladen, wenn die Seite geladen wird. Was sind die entsprechenden Header, um den Browser zu zwingen, die Datei für einen bestimmten Zeitraum zwischenzuspeichern?
Nach dem HTTP/1.1-Spezifikation, das ist nicht das, was muss validierenden bedeuten soll - es sollte nur in treten, nachdem der zwischengespeicherten Inhalt abgestanden worden ist (wie vom Verfällt Header oder ein Max-Age-Wert innerhalb von Cache-Control), aber einige Browser scheinen die Spezifikation zu ignorieren und die Anfrage dennoch zu senden. 'öffentlich' ist jedoch nicht wirklich anwendbar, es sei denn, die Verbindung ist authentifiziert. Ich würde 'Cache-Control: max-age = 86400' verwenden, um die Zeit im Expires-Header zu verstärken. –
@Brock Batsell: Danke für den Kommentar! Das hat es geklärt und es funktioniert jetzt mit max-age = XXXX – Max
Wenn der Dateiinhalt geändert wird, wird die angeforderte Datei nicht aktualisiert. Das OP fordert an, dass die Datei nicht zwischengespeichert werden soll, wenn der Inhalt geändert wird. Wenn sich der Dateiinhalt nicht geändert hat, sollte er zwischengespeichert werden. Der von Ihnen bereitgestellte Code aktiviert die Funktion "Caching". Es löst das Problem des OP nicht. –