質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.95%

キャッシュを残したくない(Webサイトで使う全ファイル)

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 230

score 9

前提・実現したいこと

画像、javascript、css、html、php、動画など
ワードプレスのWebサイトで使うあらゆるファイルで
キャッシュを残したくない。

発生している問題・エラーメッセージ

あらゆるファイルでキャッシュを残さない設定方法がわからない

該当のソースコード

header('Expires: Tue, 1 Jan 2018 00:00:00 GMT');
header('Last-Modified:' . gmdate( 'D, d M Y H:i:s' ) . 'GMT');
header('Cache-Control:no-cache,no-store,must-revalidate,max-age=0');
header('Cache-Control:pre-check=0,post-check=0',false);
header('Pragma:no-cache');


出典元:
https://ysinc.co.jp/blog/wpcache/

試したこと

googleでキャッシュについて調査。

no-cacheよりno-storeを設定した方がいいとのこと。

方法1:htaccessを使う方法
方法2:phpのheader関数を使う方法
方法3:htmlのmetaタグの方法
上記3つが出てきた。

ーーーーーーー

方法1:htaccessについては拡張子を指定して制限すれば
そのファイルだけキャッシュ利用不可になるとのこと。
逆を言えば拡張子を指定しなければ全てのファイルに適用できそう。
ただしhtaccessファイル自体がキャッシュされてしまう可能性を
否定できる情報が見つからなかった。htaccessは影響範囲が多いので
できれば方法2がいい。

ーーーーーーー

方法2:phpに書くということで、php以外の画像ファイルや動画ファイルなどの他のファイルのキャッシュも残らないのかが不明。「no-store ワードプレス」などで検索しても、ワードプレスのどのファイルに上記該当のソースコードを記述すればいいのかの情報も出てこなかった。「no-store functions.php」でも成果なし。

ーーーーーーー

方法3:htmlに書くということで、html以外の画像ファイルや動画ファイルなどの他のファイルのキャッシュも残らないのかが不明。しかも記述しても効果がなかったという記事も散見される。

追記1:キャッシュを無効にしたい理由

更新したらすぐに反映させたいからです。ユーザー側にキャッシュを削除してもらうのは負担なので避けたいです。

追記2:キャッシュを無効にしたい範囲

フロントエンドで主に作業するので、
画像、javascript、css、html、動画  はキャッシュさせたくないです。

ワードプレスを利用するので、
php、データベース もキャッシュさせたくないです。

ただしワードプレスのシステムで使っている全ファイルの種類を網羅しているわけでないので、上記に挙げた種類のファイル以外にも「Webサイトで使うあらゆるファイル」というのが希望でした。しかし「あらゆるファイル」では質問としてあいまいで、抽象的すぎました。失礼いたしました。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2021/06/10 15:01

    質問本文に追記してください。
    あと、css等の話であれば回避方法はいくらでも有りますし、「あらゆる」のカバーする範囲が決まってるかどうかにもよります。
    ものにより対策も異なるでしょうし

    キャンセル

  • kjshdfiuasye

    2021/06/11 10:53

    m6u様
    ご回答ありがとうございます。いただいたご回答を今試している作業ですので、今しばらくお待ちいただければ幸いです。

    キャンセル

  • kjshdfiuasye

    2021/06/11 10:53

    m.ts10806様
    コメントありがとうございます。キャッシュ無効に関する、理由と範囲について追記いたしました。

    キャンセル

回答 3

+1

webサーバープログラムがHTTP応答時に付与するHTTPヘッダに、
有効期限をつけておけば、お望み通りになるかと。
(ただし、レンタルサーバーによってはサービスの規模に依って、データ転送量による制限や規制が加わる可能性もありますので、契約などご確認を。)

例えばapache httpdの例で行くと、
mod_expires - Apache HTTP Server Version 2.4
Alternate Interval Syntax
に関する設定を施すことで、
ExpiresActive On
ExpiresDefault "access plus 60 seconds"
とかなら、せいぜい保って60秒になったりするかと。
ExpiresByType ディレクティブを駆使して、特定のMIMEタイプでは短く長くなども出来るようです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/06/11 13:04

    極端すぎる値は、webブラウザで無視される可能性もありますよね。

    キャンセル

  • 2021/06/14 10:02

    コメントありがとうございます。

    >Google Chromeで試すときは、Shiftキーを押しながら再読込ボタンをクリックしないと、
    キャッシュした内容で表示し直すので注意です。
    ↑承知しました。

    キャンセル

  • 2021/06/14 10:24

    コメントありがとうございます。
    >極端すぎる値は、webブラウザで無視される可能性もありますよね。
    ↑確かに、3secondsでは短すぎたかもしれません。ためしに60secondsにしてみて2分後にアクセスしたところ、safariでキャッシュされてしまいました。画像、動画、css、javascriptはパラメーターをつけることで対処しようと思います。php、データベースのキャッシュについては諦めようと思います。ありがとうございました。

    キャンセル

+1

ただしhtaccessファイル自体がキャッシュされてしまう可能性を
否定できる情報が見つからなかった。

.htaccessは原理的にブラウザにキャッシュされるものでは無いので、
Apacheの前段にキャッシュサーバやCDNを設置していない限りは即時反映されますよ。

否定できる情報が無いというのはその通りだと思いますが、
自明の事なのでわざわざ言及する必要性が無い(そこまで言及すると、WEBサーバの動作から全部説明しないといけない)ためだと思います。


.htaccessがキャッシュされない(そもそもブラウザには渡されない)事を確認するには

  1. 画像読み込みなどが無いシンプルはHTMLを用意して、Chromeでアクセス
  2. 開発者ツールを開く(F12)
  3. リロードボタンを右クリック→キャッシュの消去とハード再読み込み
  4. 開発者ツール「Newwork」タブで全ての通信のレスポンスヘッダとレスポンスを確認して、.htaccessが送信されていないことを確認する

という感じで確認が出来ます。

コメントを受けての追記

Y.H.さんのコメント

Y.H.
2021/06/10 18:21
> htaccessファイル自体がキャッシュされてしまう
厳密には、もともと200を返していたコンテンツで.htaccessにCache-Controlなどを追加しても
200返していた時のレスポンスをキャッシュしていた場合はリクエスト飛ばないので.htaccessに記載したものが反映されないとかのことを言っているのかなと。

はその通りで、
.htaccess(やApacheの設定)によって全てのリソースをCache-Controlヘッダによってキャッシュしない様に設定した場合でも、既にキャッシュされているリソースについては無力です。

これをクリアするためにはブラウザ側でキャッシュをクリアするか、キャッシュの寿命が尽きるのを待つしかありません。

全てのリソースをキャッシュしない設定を有効に出来ていれば、
キャッシュの寿命が尽きた後は全てのリソースがキャッシュされなくなるため、
初回のみキャッシュをクリアしてもらうか寿命が過ぎるのを待てば、それ以降は問題が無くなります。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/06/11 10:46

    ご回答ありがとうございます。新規サイトであれば公開前にキャッシュ無効設定を済ませておけば、公開後、一般の訪問者にはキャッシュは保存されなさそうですね。新規作成サイトでなく、もう公開されている既存のサイトでキャッシュをコントロールするのは難しそうですね。

    キャンセル

  • 2021/06/11 10:57

    > もう公開されている既存のサイトでキャッシュをコントロールするのは難しそうですね。

    そうですね。
    とは言っても無限にキャッシュが残る訳ではないので、既存のコンテンツでもコンテンツ更新の何日か前にに.htaccessだけ更新しておけば問題が出ないケースが多いと思いますよ(既存のキャッシュの寿命次第ですが)

    キャンセル

  • 2021/06/11 11:10

    ご回答ありがとうございます。
    >更新の何日か前にに.htaccessだけ更新しておけば問題が出ないケースが多いと思います
    ↑承知しました。

    キャンセル

0

質問者の「キャッシュ」はクライアント側のキャッシュ(ブラウザキャッシュ)の事だろうということで答えてみます。それらの方法はすべてクライアントに「キャッシュしないでね」というお願いだと思うので、結局の所はクライアントの仕様によるのだと思います。何が何でも絶対にキャッシュさせないというのは難しいのかもしれません。先人の方が試されてもダメだったということは、おそらくそういうことだったと思います。

何とかしたいと考えるなら、サーバサイドレンダリングでSPAでサイトを構築するとか、ストリーミング動画配信のような表現でサイトを構築するとか、根本的に違う方法を試すとかになるんでしょうか。それで「キャッシュ」を防げるかどうかはなんともですが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/06/10 12:15

    ご回答ありがとうございます。説明不足で申し訳ございません。おっしゃる通りブラウザに残るキャッシュのことです。命令ではなくあくまでお願いだったのですね。ありがとうございました。学習コストがかからない対策として、画像・動画・js・cssファイルならパラメーターをつければいい気もしてきましたが、htmlやphpはどうしたものかという感じです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.95%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る