やりたいこと
Webサイトのキャッシュをさせたくない
コンテンツ側で制御する場合、キーワード:ヘッダー
以下で書いてる「ヘッダー」とは、「HTTPヘッダー」のことです。
- 動的コンテンツ
- ヘッダー制御ができるのでキャッシュ無効化しやすい。
- 静的コンテンツ
- 設定ムズイ
- metaタグによって制御する
- ブラウザによってはサポートしていない
- <meta + なに?
- cache-control
- Expires
- プロキシはMETAタグを読み取ってくれない
Apache側で制御
- mod_headersを利用する
- confを見て確認する
- confに以下ある
-
LoadModule headers_module modules/mod_headers.so
-
- confに以下ある
- コマンドで確認する
- httpd -M | grep -i headers
- キャッシュ無効化設定
- httpd.conf(または、.htaccessを配置)に下記のように記載
-
FileEtag None RequestHeader unset If-Modified-Since Header set Cache-Control no-store
-
- httpd.conf(または、.htaccessを配置)に下記のように記載
- 特定のファイルだけキャッシュ無効化設定
- httpd.conf(または、.htaccessを配置)に下記のように記載
-
<Files ~ "\.(css|js)$"> FileEtag None RequestHeader unset If-Modified-Since Header set Cache-Control no-store </Files>
-
- httpd.conf(または、.htaccessを配置)に下記のように記載
- キャッシュ無効化確認
- ブラウザのデベロッパーツール>Networkからどうぞ。
- Statusが200番であること
- ブラウザのデベロッパーツール>Networkからどうぞ。
- confを見て確認する
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 | MDNCache-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 | MDNETag (またはエンティティタグ)は HTTP のレスポンスヘッダーで、リソースの特定バージョンの識別子です。ウェブサーバーは、コンテンツが変更されていない場合はレスポンス全体を再送する必要がないので、キャッシュがより効率的になり通信帯域を節約することができます。加えて、 ETag はリソースが同時に更新されて互いを...
If-Modified-Sinceとは、リソースの更新日付を見てキャッシュを利用するか判断するやつ
HTTP の
If-Modified-Since
リクエストヘッダーは、リクエストを条件付にします。サーバーは最後にリソースが変更された時刻が、リクエストにより与えられた時刻より後の場合にのみ、リクエストされたリソースを200
ステータスと共に返却します
If-Modified-Since - HTTP | MDNHTTP の If-Modified-Since リクエストヘッダーは、リクエストを条件付にします。サーバーは最後にリソースが変更された時刻が、リクエストにより与えられた時刻より後の場合にのみ、リクエストされたリソースを 200 ステータスと共に返却します。もしリクエストにより与えられた時刻以降にリソースが変更されてい...
コメント