スレッド一覧 > 記事閲覧
[148] 戻る・進むボタンを押した時のみキャッシュしたい
日時: 2021/03/13 01:48
名前: 匿名 ID:7KIlZSF2 メールを送信する
参照: https://sinst.ie-t.net/

非常にありがたいサービスに感謝します。
1つ、解決したい問題があります:

例えば a.html と a.php があり、
a.html から a.php へのリンクが貼られているとします。
そして、a.php はアクセスすると mt_rand 等でランダムな数値を表示するものとします。ランダムのため、F5キーなどでリロードするとそのたびに違う数値を表示します。

この時、例えば初めてa.htmlにアクセスした人がリンクをクリックし、
a.phpが初めて実行されて「43」と表示されたとします。

その後、ブラウザの「戻る」ボタンを押してa.htmlに戻ります。
問題はここからです。

次に再度リンクをクリックしてa.phpにアクセスすると、
再びa.phpが実行され、今度は「43」以外の数値(例えば「125」)が表示されるのを期待します。
一方、リンククリックではなく、ブラウザの「進む」ボタンにて再度a.phpを表示した時は、キャッシュから読み込まれて再び「43」が表示される事を期待します。

しかし、実際には「進む」ボタンのみならず、リンクをクリックした時にもキャッシュが読み込まれてしまい、
どんなにクリックしても「43」が表示され続けてしまうのです。
F5キーを押さない限り、これを別の数値にすることはできませんでした。
つまり、PHPの実行結果のキャッシュが強すぎるのです。

そこで、Header set Cache-Control "no-store" などを設定し、
キャッシュを無効化する事を考えました。
そうすれば、リンククリック時に必ずa.phpが再実行されます。

しかし、それだと別の問題が起こります。
キャッシュを無効化してしまうと、
一度「戻る」ボタンでa.htmlに戻った後に
「進む」ボタンで再びa.phpを表示させた時にも、
強制的にa.phpが再実行されてしまうのです。
これでは、サイトアクセスが増えた時にサーバへの負荷がかかりすぎてしまいます。
「進む」ボタンの時はPHPを実行させずに、キャッシュから「43」が表示されて欲しいのです。

整理すると、
「進む/戻る」ボタンの時のみキャッシュから読み込み、
リンククリックとF5キーの時はPHPをしっかり実行するようにしたいのですが、
これを実現する設定があったり、
現状の挙動の原因となっている何かしらの設定項目があるのでしょうか。

私は、過去にこのような理想の動作が実現できたサーバ環境も経験したことがあるので、
設定次第で解決可能かもしれないと思い、知恵を募ります。

1つ、原因の候補かもしれないものとして、「ウェブアクセラレータ」というものを疑っています。
ネットで調べてみると、一部のサーバには「ウェブアクセラレータ」という機能を備えているものがあるらしく、これはブラウザ側が持つキャッシュとは別に、サーバ側がキャッシュを保持するもののようです。「ウェブアクセラレータをオフにしたら、キャッシュのおかしな挙動が直った」という体験談が見つかりました:
https://lpeg.info/webworks/cash_on.html
メンテ

Page: 1 | 2 | 全部表示 スレッド一覧 新規スレッド作成

補足説明 ( No.1 )
日時: 2021/03/13 08:43
名前: 匿名 ID:7KIlZSF2 メールを送信する
参照: https://sinst.ie-t.net/a.html

追記:
昨晩間違えてトップページのURLを書いてしまったため、a.htmlへの検証用URLを貼ります。

追記2:
昨晩の「私は、過去にこのような理想の〜(中略)〜知恵を募ります。」の部分の表現が分かりにくかったので、補足します。以下の3点です。:

https://lpeg.info/webworks/cash_on.html
にて説明されている「ウェブアクセラレータ」という機能について、
もしかしたら、他サーバーと同様のこの機能がこちらのサーバーにもあり、それが原因でa.phpの奇妙なキャッシュ動作が起こっているのかもしれない点

・上記のサイトによると、他サーバーのコンパネには「ウェブアクセラレータ」機能をオンオフできるスイッチが用意されていることが多いようですが、もしもこちらのサーバーにも同様の機能があり、この機能が悪さをしていたとした場合、こちらのサーバーのコンパネにも同様のスイッチがあるかどうか

・それとも、そもそも「ウェブアクセラレータ」とは別の原因による場合、他にどのような原因が考えられるか
メンテ
補足2 ( No.2 )
日時: 2021/03/13 09:15
名前: 匿名 ID:7KIlZSF2 メールを送信する

連続投稿失礼します。

(ブラウザ側ではなく)サーバー側のキャッシュについて調べていると、
もしかしたら apache の httpd.conf にある
・EnableMMAP
・EnableSendfile
という2つの項目(ディレクティブ)がサーバーサイドキャッシュに関わっているようです。
(nginx.conf ならば sendfile : off; などのようです)

原因調査のため、まずこれらの項目が Off になっているかどうかの確認と、なっていなければ、Offにしてみる事の検討をしていただけると幸いです。これにはサーバソフトの再起動が必要らしいので、私にはいじれない項目かと思います。そのため、こちらのスレッドに調査結果が届くまでの間、暫く待ってみることにします。特に急かすつもりはないので、調査は無理のない範囲で大丈夫です。

不勉強ながらこれらの項目の存在をついさっき知ったため、補足情報の書き込みが遅れてしまい申し訳ございませんでした。
メンテ
お待ち下さい ( No.3 )
日時: 2021/03/13 22:42
名前: ちらみ◆kBt3KPJY0E ID:OHyW4cA2 メールを送信する

了解しました。
今月は本業の方でバタバタしてて今もシステム切替中なので落ち着いたら検討します。
メンテ

Page: 1 | 2 | 全部表示 スレッド一覧 新規スレッド作成

題名
スレッドをトップへソート
名前
「名前#任意の文字列」でトリップ生成
E-Mail
入力するとスレッドの通知メールを受け取れます。(非表示)
URL
パスワード (記事メンテ時に使用)
投稿キー (投稿時 投稿キー を入力してください)
コメント

   クッキー保存