, was immer Sie tun, seien Sie vorsichtig über Caching auf der Client-Seite:
Browser tut alle Arten von Tricks, um zu versuchen, die Bandbreite zu minimieren und es gibt viele Möglichkeiten, in dem HTTP-Protokoll, das zu tun, von denen alle werden von Apache behandelt - wenn Sie nur eine lokale Datei bedienen.
Wenn Sie nicht sind, dann es ist Ihre Verantwortung.
Schauen Sie sich zumindest die ETag und die If-Modified-Since-Mechanismen an, die von allen aktuellen Browsern unterstützt werden und die stabilste Möglichkeit zu sein scheinen, den Server nach aktualisierten Inhalten abzufragen.
Eine Möglichkeit, eine CSS-Datei-Browser mit der If-Modified-Since-Header ist so etwas wie dies (die leeren Header schalten Sie alle nicht-Caching-Header PHP sendet per default) zu dienen:
$p = 'path/to/css/file'
$i = stat($p);
if ($_SERVER['HTTP_IF_MODIFIED_SINCE']){
$imd = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
if (($imd > 0) && ($imd >= $i['mtime'])){
header('HTTP/1.0 304 Not Modified');
header('Expires:');
header('Cache-Control:');
header('Last-Modified: '.date('r', $i['mtime']));
exit;
}
}
header('Last-Modified: '.date('r', $i['mtime']));
header('Content-Type: text/css');
header('Content-Length: '.filesize($p));
header('Cache-Control:');
header('Pragma:');
header('Expires:');
readfile($p);
Der Code verwendet den if-modified-since-header, den der Browser sendet, um zu überprüfen, ob sich die tatsächliche Datei auf dem Server seit dem Datum geändert hat, das der Browser angegeben hat. Wenn dies der Fall ist, wird die Datei gesendet, andernfalls wird 304 Not Modified zurückgegeben und der Browser muss den gesamten Inhalt nicht erneut herunterladen (und wenn er intelligent genug ist, hält er das geparste CSS auch im Speicher).
Es gibt noch einen weiteren Mechanismus, bei dem der Server einen eindeutigen ETag-Header für jedes Stück Inhalt sendet. Der Client sendet das mit einem If-None-Match-Header zurück, so dass der Server nicht nur über das Datum der letzten Änderung, sondern auch über den Inhalt selbst entscheiden kann.
Dies macht aber nur den Code komplizierter, also habe ich es weggelassen. FF, IE und Opera (wahrscheinlich auch Safari) senden alle den If-Modified-Since-Header, wenn sie Inhalte mit einem Last-Modified-Header empfangen, also funktioniert das gut.
Denken Sie auch daran, dass bestimmte Versionen von IE (oder die JScript-Runtime, die es verwendet) noch Probleme mit GZIP-übertragenen Inhalt haben.
Oh. Und ich weiß, dass das nicht Teil der Frage ist, aber auch Acrobat in einigen Versionen. Ich habe Fälle und Fälle von weißen Bildschirmen gehabt, während ich PDFs mit gzip Übertragungsverschlüsselung gedient habe.
nur neugierig - warum hat das Host-Unternehmen mod_deflate und mod_gzip deaktiviert ?! Es ist eigentlich ihr Interesse, sie eingeschaltet zu haben! – scunliffe