キャッシュさせない Apache設定

Apache
スポンサーリンク

やりたいこと

Webサイトのキャッシュをさせたくない

 

 

 

コンテンツ側で制御する場合、キーワード:ヘッダー

以下で書いてる「ヘッダー」とは、「HTTPヘッダー」のことです。

 

  • 動的コンテンツ
    • ヘッダー制御ができるのでキャッシュ無効化しやすい。

 

  • 静的コンテンツ
    • 設定ムズイ
    • metaタグによって制御する
      • ブラウザによってはサポートしていない
      • <meta  + なに?
        • cache-control
        • Expires
    • プロキシはMETAタグを読み取ってくれない

 

Apache側で制御

  • mod_headersを利用する
    • confを見て確認する
      • confに以下ある
        • LoadModule headers_module modules/mod_headers.so
    • コマンドで確認する
      • httpd -M | grep -i headers
    • キャッシュ無効化設定
      • httpd.conf(または、.htaccessを配置)に下記のように記載
        • FileEtag None
          RequestHeader unset If-Modified-Since
          Header set Cache-Control no-store
    • 特定のファイルだけキャッシュ無効化設定
      • httpd.conf(または、.htaccessを配置)に下記のように記載
        • <Files ~ "\.(css|js)$">
              FileEtag None
              RequestHeader unset If-Modified-Since
              Header set Cache-Control no-store
          </Files>
    • キャッシュ無効化確認
      • ブラウザのデベロッパーツール>Networkからどうぞ。
        • Statusが200番であること

 

100%キャッシュ無効化できるとは限らない

キャッシュプロキシサーバ(以下プロキシサーバ)など、クライアント側の資産にキャッシュされている場合、サーバ側からはコントロールできない。

プロキシサーバの仕組み上は、Webサーバに更新が無いかを確認するという動きになっているみたいなので、ほぼほぼ大丈夫とは思うが。

参考にしたサイト

動的なプログラムでコンテンツを管理している場合、HTTPヘッダを制御できるのでキャッシュコントロールがしやすい

 

HTMLの場合、METAタグにcache-controlやExpiresを入れるやり方が一般的ですが、

 

『Apacheから強制的にキャッシュを使わせないようにする方法』
動的なプログラムでコンテンツを管理している場合、HTTPヘッダを制御できるのでキャッシュコントロールがしやすいですが、静的なHTMLだけの場合はキャッシュの制…

 

↑アメブロのこの記事が全て言ってくれてる。

 

 

no-cacheとno-storeの違い詳しく

 

no-cache

もし、「キャッシュさせない」の意味が実際には「保存させない」であるなら、no-store が使用すべきディレクティブです。

 

no-store

レスポンスディレクティブの no-store は、あらゆる種類のキャッシュが(プライベートであろうと共有であろうと)このレスポンスを保存しないようにすることを指示します。

Cache-Control: no-store

 

 

Cache-Control - HTTP | MDN
Cache-Control は HTTP のヘッダーフィールドで、 キャッシュ をブラウザーや共有キャッシュ(プロキシーや CDN など)において制御するためのディレクティブ (指示) を、リクエストとレスポンスの両方で保持します。

 

 

Cache-Control: no-cache
一見「キャッシュを使うな」のように見えるこのヘッダが実際に意味するところは少々ニュアンスが異なる。このヘッダの意味は、いちどキャッシュに記録されたコンテンツは、現在でも有効か否かを本来のWebサーバに問い合わせて確認がとれない限り再利用してはならない、という意味である。

 

404 Not Found(お探しのページ・ファイルが見つかりませんでした。) | IPA 独立行政法人 情報処理推進機構
情報処理推進機構(IPA)の「404 Not Found(お探しのページ・ファイルが見つかりませんでした。)」に関する情報です。

no-cacheは、Webサーバに問い合わせて、キャッシュが有効ならキャッシュされちゃうんやな。

 

FileETag ディレクティブとは、レスポンスのヘッダーにくっつけるEtag(後述)を何にするか?を指定するもの

FileETag ディレクティブは ドキュメントがファイルに基づいたものであるときに、 ETag (エンティティタグ) 応答ヘッダフィールドを作成するときに使用する ファイルの属性を設定します。 (ETag の値はネットワークの帯域を節約するための キャッシュの管理で使われます。) 

 

core - Apache HTTP サーバ バージョン 2.4

 

Etagとは、キャッシュするためにコンテンツリソースにくっつける目印みたいなもん

 

ETag は HTTP のレスポンスヘッダーで、リソースの特定バージョンの識別子です。

 

。したがって Etags はフィンガープリントに似ており、

 

ETag - HTTP | MDN
ETag (またはエンティティタグ)は HTTP のレスポンスヘッダーで、リソースの特定バージョンの識別子です。ウェブサーバーは、コンテンツが変更されていない場合はレスポンス全体を再送する必要がないので、キャッシュがより効率的になり通信帯域を節約することができます。加えて、 ETag はリソースが同時に更新されて互いを...

 

 

If-Modified-Sinceとは、リソースの更新日付を見てキャッシュを利用するか判断するやつ

 

HTTP の If-Modified-Since リクエストヘッダーは、リクエストを条件付にします。サーバーは最後にリソースが変更された時刻が、リクエストにより与えられた時刻より後の場合にのみ、リクエストされたリソースを 200 ステータスと共に返却します

 

If-Modified-Since - HTTP | MDN
HTTP の If-Modified-Since リクエストヘッダーは、リクエストを条件付にします。サーバーは最後にリソースが変更された時刻が、リクエストにより与えられた時刻より後の場合にのみ、リクエストされたリソースを 200 ステータスと共に返却します。もしリクエストにより与えられた時刻以降にリソースが変更されてい...

 

 

コメント