、クライアント側でキャッシュに関する注意してください:
ブラウザは、帯域幅を試してみて、最小限に抑えるためにトリックのすべての並べ替えを行うと、それを行うためのHTTPプロトコルには多くの方法があり、すべてがあなたがローカルファイルを提供しているだけの場合は、apacheによって処理されます。
あなたがいない場合は、あなたの責任です。
最新のすべてのブラウザでサポートされているETagとIf-Modified-Sinceの仕組みを見てください。サーバーに更新されたコンテンツを照会する最も堅牢な方法です。
$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);
:場合 - 変更 - ので、ヘッダーを使用してブラウザにCSSファイルを提供する
可能な方法は、この(空のヘッダがPHPはデフォルトごとに送信するすべての非キャッシングヘッダをオフにする)のようなものです
このコードでは、ブラウザが送信した日付以降にサーバー上の実際のファイルが変更されたかどうかを確認するために、ブラウザが送信するif-modified-since-headerを使用します。そうでない場合、ファイルが送信されます。そうでない場合は、304 Not Modifiedが返され、ブラウザはコンテンツ全体を再ダウンロードする必要はありません(十分に知的であれば、解析されたCSSもメモリ内に保持されます)。
サーバーが各コンテンツに一意のETagヘッダーを送信することを含む別の方法があります。クライアントは、If-None-Matchヘッダーを使用してそれを送り返します。これにより、サーバーは最後の変更日だけでなくコンテンツ自体も決定することができます。
これはコードを複雑にしているので、私はそれをやめました。 FF、IE、Opera(おそらくSafariも)は、Last-Modifiedヘッダーが添付されたコンテンツを受け取ったときにIf-Modified-Sinceヘッダーを送信するので、正常に動作します。
また、特定のバージョンのIE(またはJScript-Runtimeが使用する)は、のGZIP転送コンテンツに問題があることにも注意してください。
ああ。それが問題の一部ではないことは分かっていますが、一部のバージョンではAcrobatもそうです。私は、gzip転送エンコーディングでPDFを処理している間に、ケースとホワイトスクリーンのケースを持っていました。
ちょうど不思議なことに、なぜホスト企業はmod_deflateとmod_gzipを無効にしていますか?実際には、それらをオンにするのは彼らの興味です! – scunliffe