SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【Apache】 キャッシュ(disk_cache)を設定したのにキャッシュしてくれない

問題

以下のように設定しているのに、全然キャッシュしてくれない。

CacheRoot /usr/local/apache2/cache
CacheEnable disk /images/item/

apache-icon

答え

ベーシック認証を設定しているページなどは、Authorizationヘッダが出力されるので、キャッシュされない!

キャッシュできるものは以下の通り。

  1. そのURLでキャッシュが有効となっていること(CacheEnable、 CacheDisable 参照)。
  2. HTTPステータスが200, 203, 300, 410 のいずれかであること。
  3. リクエストのメソッドががGETであること。
  4. リクエストが”Authorization:”ヘッダを含んでいると、キャッシュされない。
  5. レスポンスが”Authorization:”を含んでいるとき、”Cache-Control:”ヘッダに”s-maxage”, “must-revalidate” または “public”オプションを含んでいなくてはならない。
  6. URLにクエリ文字列が含まれるとき(例えば、GETメソッドのフォームなど)、レスポンスが有効期限を明示していない限りキャッシュされない(”Expires:”、もしくは”Cache-Control:”ヘッダのmax-age か s-maxageディレクティブで指定)。
  7. HTTPステータス200 (OK)のレスポンスのとき、CacheIgnoreNoLastMod ディレクティブを使わない場合、”Etag”, “Last-Modified”, “Expires”ヘッダか、”Cache-Control:”ヘッダに max-age か s-maxage ディレクティブを含まなくてはならない。
  8. “Cache-Control:”ヘッダに”private”オプションを含むとき、CacheStorePrivate の指定がないとキャッシュしない。
  9. “Cache-Control:”ヘッダに”no-store”オプションを含むとき、CacheStoreNoStore の指定がないとキャッシュしない。
  10. “Vary:*” ヘッダが含まれるときキャッシュされない

関連するメモ

コメント