【php】ブラウザにキャッシュしてもらうhttpヘッダ
問題
画像やCSVファイル、PDFファイル、負荷の高い画面などで、なるべくブラウザにキャッシュを使ってもらうためのヘッダはどうしたらいい?
答え
HTTPヘッダのExpiresを使って、なるべくキャッシュを使ってもらえるようにする。
例えばあるjpeg画像を10時間キャッシュしてもらうヘッダを出す場合。
<?php $expires = 36000; header('Last-Modified: Fri Jan 01 2010 00:00:00 GMT'); header('Expires: ' . gmdate('D, d M Y H:i:s T', time() + $expires)); header('Cache-Control: private, max-age=' . $expires); header('Pragma: '); header('Content-Type: image/jpeg'); echo $contents;
Last-Modified を過去に。
Expires を未来に。
Cache-Control と max-age を指定。
phpデフォルトの Pragma: no-cache が送られないようにする。
お行儀のよいExpiresとしては、
HTTP/1.1 サーバは、Expires の日付に 1 年後以上未来の日付を送るべきではない。
とのことなので、3年間キャッシュさせようとか、固定で10年後でも指定しておけばよいんじゃない?なんて考えない方がよいようだ。
コメント