IE6ではCache-Controlが優先される。Cache-Controlがある場合、Pragma、Expiresは無視される。
FirefoxではExpiresとPragmaが優先され、両方無ければCache-Controlが適用される。
→ ExpiresとPragma無しでCache-Controlの設定をすればほとんどのブラウザに対応できる。(IE7は?)
PHPでCache-Controlを設定する方法。
※header()より先に他の出力をしてはいけない。
$strDate = 'tomorrow'; //翌日の0時までキャッシュさせる場合
$dt = new DateTime($strDate);
header('Cache-Control: max-age=' . ($dt->format('U') - time()));
PHPではSESSIONを使うと過去日付のExpiresと"Pragma: no-cache"が設定され、クライアントキャッシュが無効になる。
Firefoxの場合ExpiresとPragmaが優先されてしまうので、PHPでSESSIONを使い、かつクライアントキャッシュを有効にするには、未来日付のExpiresと適当なPragmaでhttpヘッダーを上書きする。(Pragmaには"no-cache"以外の設定値は無い)
$strDate = '+2 days'; //現在日時から2日後までキャッシュさせる場合
$dt = new DateTime($strDate);
header('Cache-Control: max-age=' . ($dt->format('U') - time()));
if (session_id()) { //session_startしている場合
header('Expires: ' . $dt->format(DATE_RFC1123));
header('Pragma: cache'); //no-cache以外の文字列をセット(横暴?)
}
参考:
OZACC.blog: HTTPヘッダでのキャッシュ制御 2
[Studying HTTP] HTTP Header Fields
PHP: header - Manual
PHP: 日付・時刻関数 - Manual
PHP: セッション処理関数(session) - Manual
0 件のコメント:
コメントを投稿