何をするにしても、クライアント側でのキャッシュに注意してください。
ブラウザは、バンドウィズを最小化するためにあらゆる種類のトリックを実行します。HTTPプロトコルには、それを実行するための多くの方法があります。これらはすべて、ローカルファイルを提供している場合はapacheによって処理されます。
そうでない場合、それはあなたの責任です。
少なくとも、現在のすべてのブラウザでサポートされており、更新されたコンテンツをサーバーに照会するための最も堅牢な方法であると思われるETagとIf-Modified-Sinceの仕組みを確認してください。
If-Modified-Since-Headerを使用してCSSファイルをブラウザーに提供するための可能な方法は次のようなものです(PHPがデフォルトで送信する非キャッシュヘッダーをオフにするための空のヘッダー):
$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);
このコードは、ブラウザーが送信するif-modified-since-headerを使用して、ブラウザーが指定した日付以降にサーバー上の実際のファイルが変更されているかどうかを確認します。その場合、ファイルが送信されます。それ以外の場合は、304 Not Modifiedが返され、ブラウザはコンテンツ全体を再ダウンロードする必要がありません(十分にインテリジェントな場合は、解析されたCSSもメモリに保持されます)。
サーバーがコンテンツごとに一意のETag-Headerを送信するという別のメカニズムがあります。クライアントは、If-None-Matchヘッダーを使用してそれを送り返し、サーバーが最終変更日だけでなくコンテンツ自体も決定できるようにします。
ただし、これによりコードがより複雑になるため、省略しました。FF、IE、およびOpera(おそらくSafariも)はすべて、Last-Modifiedヘッダーが添付されたコンテンツを受信すると、If-Modified-Sinceヘッダーを送信するため、これは正常に機能します。
また、IEの特定のバージョン(またはそれが使用するJScript-Runtime)でも、GZIPで転送されたコンテンツに問題があることに注意してください。
おー。そして、それは質問の一部ではないことを私は知っていますが、いくつかのバージョンではAcrobatもそうです。gzip転送エンコーディングでPDFを提供しているときに、白い画面が表示される場合があります。