01.05.2010 18:59:49
Köpfchen muss man haben...
Damit der Browser die Datei auch richtig interpretiert, muss man im HTTP-header ihm sagen, dass es sich um eine CSS-Datei handelt:
Code:
- und wenn wir schon dabei sind können wir auch gleich noch ein paar Header-Informationen senden:header("Content-Type: text/css");- Last-Modified
- ETag - basierend auf Last-Modified
- Cache-Control
- und ein 304 wenn die Datei sich nicht geändert hat
Code:
[/absatz]
public function sendHeaders($dieOnNotModified = true){
header("Content-Type: text/css");
if ($this->lastModified){
header("Last-Modified: " . date("r", $this->lastModified));
header('ETag: "' . md5($this->lastModified) . '"');
if (array_key_exists("HTTP_IF_MODIFIED_SINCE", $_SERVER) && $this->lastModified <= strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"])){
header($_SERVER["SERVER_PROTOCOL"] . " 304 Not Modified");
if ($dieOnNotModified) die();
}
}
header("Cache-Control: public");
}Ein kleines Wort in diesem Code ist besonders wichtig: "die" - denn ich habe festgestellt, dass mein FireFox (3.6.3) einen völligen Schwachsinn macht, wenn man einen 304-Status und danach noch Inhalt sendet. (Bei mir wurde der Content dann irgendwie in eine noch zu ladende .js-Datei geschrieben und hat dort natürlich gehörigen Ärger gemacht.)