self redirect

自己リダイレクト

「自己リダイレクト」の仕組み

「自己リダイレクト」とは、一つのものとして扱う際に名前が無いと不便なので、私が適当に付けた名称です。その動作は外から見ると単純で、これから表示したいページをロードした後、自己リダイレクト専用のページに一旦遷移し、その後直ちに元のページに戻ってくるという動作になります。

Fig.1 自己リダイレクトのスケルトン

基本の動作は実に単純なのですが、動作環境に対して普遍化・標準化を図るために、いくつかのポイントがあります。

・HTMLソースをロードした直後に1度だけ動作します。"直後"というのは、再ロードするので、HTMLをはじめとするソースを読み込んでも無駄になるからです。

・一度だけ実行するように制御します。これが重要で、ここをしっかりしなければ、処理がループしてしまいます。制御のほとんどはループを避けるためのものになっています。

・pageA.htmlはどのようなページであっても確実に対応したいところです。そのためには、そもそもpageAに遷移してくる段階でURLに付加されているかもしれないクエリーパラメータやハッシュを持ち回らなければなりません。

上記の3点を組み込んだ結果、関連モジュール間の動きは次のようになります。少し複雑なので、PDFにしています。別ページで開きます。

自己リダイレクトの仕組み(PDF)

次に、処理の流れについて概要を列記します。

① 最初に、ブックマークから、あるいは上位のページから、さらにはブックマークから page_a.html に遷移します。

② ブラウザはキャッシュの中を検索し(②a)、page_a.htmlが存在すれば、それを読込み(③a)、なければサーバにダウンロードを要求し(②b)、サーバからはpage_a.htmlがダウンロードされます(③b)。

③ ソースの読込が始まり、javascript の外部ソース読込処理を見つけたところで、refresh_v3.js を読込ます。refresh_v3.jsを読み込む位置は、原理的には<header>の中が望ましいのですが、ソースの規模が小さいため、</body>の直前でも構いません。refresh_v3.js を root に置くことによって、page_a.html がどの階層にあっても "/" でアクセスできます。

④ refresh_v3.js に制御が移ると、page_a.html のパスを取得し、それを戻りの絶対パスとしてクエリーパラメータにセットして refresh_v3.html に遷移します。refresh_v3.html も root に置くことによって、page_a.html から容易にアクセスすることができます。

⑤ refresh_v3.htmlはクエリーパラメータから戻りの絶対パスを取り出し、新たに、年月日時刻からなる乱数もどきのクエリーパラメータを付加して、元の page_a.html に遷移します。そこで再びブラウザのキャッシュ制御によるチェックを受けますが、乱数もどきのクエリーパラメータにより、キャッシュが利用されることはありません。キャッシュ制御においては、「ファィル名+クエリー文字列」によってキャッシュ内を検索するので、ファィル名が同じでもクエリーパラメータが異なれば、別のファィルと判定されるからです。

⑥ サーバに最新の page_a.html を要求します

⑦ 晴れてサーバから最新の page_a.html がダウンロードされます。

③ 1回目同様、javascript の外部ソース読込処理を見つけたところで、refresh_v3.js を読込み、即 refresh_v3.js の処理が始まります。1回目と異なるのは、④に制御が移らないことで、ループ回避のための仕組みによって、refresh_v3.js の処理を抜けます。

⑧refresh_v3.js の処理を抜け、後続の page_a.html 本来の処理に移行します。

「自己リダイレクト」の限界と課題

「自己リダイレクト」は、ホームページ更新にまつわるユーザーとの煩雑なコミュニケーションを簡潔に整理できる点で効果絶大なのですが、問題点がないわけではありません。私は次の3点について、問題意識を持っています。

・便利なはずのキャッシュ機能を停止するので、それなりの不利益がある。

・リダイレクトの処理に関してはSEO対策上の問題があるかもしれない

・動的に読み込んだデータに対しては機能しない。また、原因は不明だが、キャッシュが機能する場面がある。ブラウザの中でどのようなキャッシュ処理が行われているか、そしてそれが今後どのように進化していくかが不透明な状況では、このような機能は今後も普遍的に利用できる保証がない。

一定の効果はあるものの。完全ではないというのが現状と認識しています。また、あえて多用する機能ではないと思うので、頻繁に更新するページにのみ設定することと、更新の頻度が落ちた場合は、適宜解除することにしています。ソースの中で1行のみなので、コメントアウトで簡単に設定・解除できます。

ダウンロード

自己リダイレクトプログラム (要パスワード)

※掲載記事及び写真に係る著作権は著者に帰属します。著作権を侵害するような利用を禁止します。掲載記事及び写真の全部または一部を複製、蓄積、出版、送信、頒布および改変する等、著者の権利を侵害する利用をすることはできません。