キャッシュと 同 期 の 推 奨 設 定 イントロダクション このドキュメントでは Curl RTE のパフォーマンスを 最 大 限 に 活 用 できるように Curl RTE の 設 定 と Web ブラウザのキャッシュの 特 徴 について 説 明 します この 設 定 を 採 用 することで 正 確 なプログラムの 動 作 を 維 持 しながら Curl アプリケー ションにおいて 最 も 効 果 的 なキャッシュと 同 期 を 行 うことができます 推 奨 設 定 の 概 要 このセクションでは 推 奨 する 設 定 についてそれぞれ 簡 単 に 説 明 します 詳 細 はその 後 の セクションで 述 べられています サーバーの 設 定 サーバーと 開 発 用 マシンの 時 刻 設 定 の 同 期 をとってください Curl のコンテンツの 開 発 や 配 信 に 関 わるすべてのマシンに 時 刻 同 期 ソフトウェアを 実 行 し すべてのマシンが 正 確 な 時 刻 を 維 持 できるようにしてください また クライアント マシンも 同 様 に 同 期 させておくとよいでしょう HTTP サーバーでは アプレットの 起 動 ファイルの 有 効 期 限 を 短 く 設 定 し その 他 のファ イルにはこの 設 定 を 行 わないでください HTTP サーバーでは 必 要 に 応 じてアプレットの 起 動 ファイルにおけるキャッシュの 有 効 期 限 ( 以 下 有 効 期 限 ) 短 く 設 定 してください ただし Curl のアプレットで 参 照 するその 他 のファイル( 例 えば pcurl ファイル 画 像 ファイルなど)はキャッシュの 有 効 期 限 を 設 定 しないでください ファイル 変 更 時 刻 の 管 理 1/8
Curl のファイルをディプロイする 時 に ファイルの 更 新 日 時 は 未 来 の 日 時 にしないで ください Curl のコンテンツファイルを HTTP サーバーにディプロイした 時 に サーバーの 時 刻 に 対 して 未 来 のファイル 更 新 日 時 にしないでください 前 述 の 設 定 (マシンの 時 刻 設 定 の 同 期 ) がなされていれば この 様 な 問 題 は 起 こらないでしょう ミラーサーバーにある 同 じファイルの 更 新 日 時 も 必 ず 一 致 させてください 一 つの HTTP アドレスからアクセス 可 能 な 複 数 の HTTP サーバーに Curl のコンテンツが 配 布 される 場 合 は 全 てのサーバーにあるファイルが 同 一 のファイル 更 新 日 時 を 保 持 する ようにしてください 例 えば ロードバランサーなどの 負 荷 分 散 機 を 利 用 して 複 数 台 のサーバから 同 じ Curl アプレットのコンテンツを 提 供 する 場 合 がこのケースにあたります 変 更 されていないファイルの 更 新 日 時 は サーバに 配 布 する 際 に 変 更 されないようにして ください ファイル コンテンツが 変 更 されない 場 合 は サーバー 上 にある そのファイルの 更 新 日 時 の 更 新 を 避 けてください ファイルが 更 新 された 場 合 そのファイルの 更 新 日 時 を 古 くすることを 避 けてください HTTP サーバー 上 のファイルを 古 い 更 新 日 時 に 変 更 されたものと 入 れ 替 えないようにし てください 更 新 日 時 を 更 新 する( 新 しくする)ことをお 勧 めします アプレット applet 宣 言 の 中 で resync-as-of を 利 用 してください HTTP サーバー 上 にディプロイした 最 新 版 コンテンツの 更 新 日 時 以 降 となる 日 時 を 指 定 し て resync-as-of 宣 言 を applet に 追 加 してください resync-as-of を 設 定 する 場 合 は クライアントの 時 刻 設 定 との 差 異 を 考 慮 してください resync-as-of の 設 定 はクライアントマシンの 設 定 時 刻 に 基 づいて 解 釈 されるので 今 後 クライアントとサーバー 間 で 起 こりえる 時 間 差 を 考 慮 して resync-as-of に 指 定 する 日 時 2/8
を 調 整 してください たとえば クライアントの 時 刻 がサーバーの 時 刻 より2 時 間 遅 れる ことが 考 えられる 場 合 サーバーにディプロイした 更 新 日 時 に2 時 間 を 追 加 して resync-as-of に 指 定 してください アプレットの 起 動 ファイルのサイズを 最 小 化 してください 再 ロード 時 のダウンロード 負 荷 を 最 小 限 にするために 最 初 に 読 み 込 まれるファイルのサ イズを 可 能 な 限 り 小 さくしてください 代 わりに コンテンツはパッケージや そのファ イルがインクルードするファイルに 含 めてください クライアントの 設 定 クライアント 側 のコントロールパネルにある 強 制 再 同 期 オプションに 依 存 しないでくだ さい クライアントのコントロールパネル 設 定 を 制 御 する 方 法 がなく またそれらの 設 定 はいつ でもエンドユーザーによって 変 更 できます そのため Curl RTE のコントロール パネル にある 全 てのアプレットの 再 同 期 を 強 制 する のオプション 設 定 を 使 用 しても 効 果 的 なキャッシュと 同 期 を 実 現 することはできません その 代 わりにアプレットに 適 切 な resync-as-of 宣 言 を 使 用 してください 推 奨 の 詳 細 サーバーの 設 定 以 下 のことを 推 奨 します サーバーと 開 発 用 マシンの 時 刻 設 定 を 同 期 させてください HTTP サーバーでは アプレットの 起 動 ファイルのキャッシュ 有 効 期 限 を 短 く 設 定 し その 他 のファイルにはこの 設 定 を 行 わないでください Curl のコンテンツの 開 発 ディプロイ 配 信 に 関 わるすべてのサーバーと 開 発 用 マシン の 時 刻 設 定 を 常 に 同 期 させた 状 態 にしてください Curl RTE の 同 期 メカニズムは Web ブ ラウザのメカニズムと 同 様 に 静 的 なコンテンツのファイル 変 更 時 刻 に 依 存 しています 3/8
開 発 およびディプロイメントのためのマシンの 日 時 を 常 に 同 期 させることが 重 要 です そ れらのマシンのファイル 更 新 日 時 が HTTP サーバーにディプロイされるファイルの 更 新 日 時 に 影 響 を 与 えるからです また サーバーマシン 同 士 を 常 に 同 期 させることも 重 要 で す そのことが 低 レベルの HTTP のキャッシュ 動 作 に 影 響 を 与 えるからです サーバーと 開 発 マシンを 同 期 させておくことで 以 下 に 説 明 するような 未 来 のファイル 更 新 日 時 によ って 間 違 ったキャッシュの 結 果 を 引 き 起 こす 可 能 性 を 軽 減 することができます マシンを 同 期 させる 適 切 な 方 法 はプラットフォームによって 異 なりますが その 方 法 は 難 しくありません Windows では [ 日 付 と 時 刻 ]のコントロール パネルで 時 刻 の 同 期 を 設 定 できます サーバーマシンをタイム サーバーとして 設 定 しますが ファイアウォール が 外 部 のタイム サーバーに NTP の 要 求 を 許 可 しておく 必 要 があるかもしれません Linux 上 では NTP サービスのセットアップが 必 要 となります HTTP サーバーで アプレットの 起 動 ファイルの 有 効 期 限 を 短 く 設 定 することを 推 奨 しま す ただし アプレットの 起 動 ファイルから 直 接 または 間 接 的 に 呼 び 出 される 更 新 の 必 要 がないその 他 のファイルに 対 しては この 設 定 はしないでください アプレットの resync-as-of 宣 言 によって Curl RTE がロードするファイルに 関 しては 同 期 されているか 確 認 できますが アプレットの 起 動 ファイル 自 体 の 同 期 は Web ブラウザ によって 行 われているため Curl RTE は 制 御 できません エンドユーザーは [Ctrl] キ ー(IE の 場 合 )または [Shift] キー(Netscape/Mozilla の 場 合 )を 押 しながら 再 ロ ード ボタン( 通 常 は F5 キーに 割 り 当 てられています)を 押 すことにより ブラウザで 強 制 同 期 ができますが これにはエンドユーザーがいつ 強 制 同 期 をすべきか 知 っている 必 要 があります 有 効 期 限 が 切 れる 時 期 はアプリケーションの 性 質 によって 異 なりますが ア プレットが 非 常 に 大 きい 場 合 や ユーザーが 変 更 にすぐに 気 づく 必 要 がない 場 合 を 除 き 有 効 期 限 がすぐに 切 れるよう 設 定 することが 理 にかなっています アプレットが 使 用 する 他 のファイルに 有 効 期 限 を 設 定 すると 不 必 要 な HTTP の 同 期 が 発 生 するので 推 奨 できま せん ファイル 変 更 時 刻 の 管 理 未 来 のファイル 更 新 日 時 で Curl のファイルをディプロイしないでください ミラーサーバー 間 の 同 一 ファイルは ファイル 更 新 日 時 も 必 ず 同 期 させてください 4/8
ディプロイメントの 際 に 変 更 されていないファイルの 更 新 日 時 が 変 更 されないよう にしてください ファイル 更 新 日 時 を 過 去 に 戻 さないようにしてください 最 終 更 新 日 時 が 重 要 なファイル 属 性 となります これが Curl RTE と 基 礎 となる HTTP レ イヤの 中 で 静 的 に 生 成 されたコンテンツのキャッシュと 同 期 を 制 御 します サーバー 上 の コンテンツを 配 信 する 際 に Web ブラウザによってファイルの 最 終 更 新 日 時 が HTTP ヘッ ダーの Last-Modified に 設 定 されます この 値 はファイルのコンテンツをキャッシュする ときは HTTP キャッシュによって 保 存 され また Curl のパッケージをキャッシュする ときは Curl RTE によって 保 存 されます この 振 る 舞 いはファイルによって 異 なります ファイル 更 新 日 時 が 変 わると コンテンツが 変 更 され 再 ロードが 必 要 であると 解 釈 されま す HTTP の 標 準 では サーバーが 未 来 日 時 の Last-Modified ヘッダーを 返 さないようにし 未 来 日 時 は 現 在 の 日 時 に 変 換 するように 規 定 されています これにより サーバーに 未 来 日 時 のファイルを 置 いた 場 合 サーバーの 設 定 日 時 が 現 在 の 日 時 となるまで サーバーか らファイルがロードされるたびに 異 なる Last-Modified となってしまいます Curl のパ ッケージやマニフェスト ファイルでこれが 起 こると Curl RTE がコンテンツに 実 際 には なかった 変 更 があったとみなし 不 必 要 な 再 コンパイルが 実 行 されます これは 大 きな アプリケーションではかなり 負 担 となります したがって このような 状 況 は 絶 対 に 避 け るべきです 前 述 の 推 奨 にあるように Curl のコンテンツの 開 発 ディプロイ 及 び 配 信 に 関 わるマシンがお 互 いに 同 期 されていれば このようなことが 起 こる 可 能 性 は 低 いでし ょう 同 様 の 理 由 で すべてのミラーサーバー 上 の 同 じファイルが 同 じ 更 新 日 時 であることが 非 常 に 重 要 となります そうでない 場 合 クライアントがひとつのサーバーからファイルを 読 み 込 み その 後 別 のサーバーから 同 じファイルを 読 み 込 むと Last-Modified が 異 な るためにクライアントではファイルが 期 限 切 れだと 判 断 して ファイルの 再 ロードや そ れに 依 存 するすべてのコンポーネントの 再 構 築 を 要 求 します これでは 負 荷 分 散 のため に 複 数 設 置 されている HTTP サーバーからロードする 利 点 がなくなります Curl パッケージの 不 必 要 な 再 ロードや 再 コンパイルを 最 小 限 に 抑 えるために サーバー に 配 置 されたときから 変 更 のかかっていないファイルに 対 しては 異 なる 更 新 日 時 にしな いようにしてください 5/8
また サーバー 上 のファイルを 現 在 の 更 新 日 時 よりも 古 い 更 新 日 時 のファイルと 置 き 換 えないようにしてください クライアントがそれらのファイルを 適 切 に 更 新 しない 可 能 性 があります HTTP プロトコルの 設 計 は Last-Modified の 日 時 が 修 正 される 直 前 のファ イルの 更 新 日 時 よりも 先 に 進 むことを 前 提 としています したがって ほとんどの HTTP クライアントとサーバーは Last-Modified の 日 時 が 以 前 の 日 時 に 変 更 されても コンテ ンツを 更 新 しないように 実 装 されています このような 場 合 Web ブラウザと Curl RTE は クライアント 上 のブラウザ HTTP キャッシュがクリアされるまでサーバー 上 の 変 更 に 気 づかない 可 能 性 があります アプレット アプレットで resync-as-of 宣 言 を 使 用 してください resync-as-of を 設 定 する 場 合 は クライアントとサーバー 間 の 時 刻 設 定 の 差 異 を 考 慮 してください 最 初 に 読 み 込 まれるファイル のサイズを 最 小 限 にしてください メインのアプレットの 起 動 ファイルがブラウザによってロードされ そのコンテンツが Curl RTE に 渡 されると アプレットで 使 用 される 残 りのファイルの 同 期 は 以 下 に 示 す ようなアプレットのヘッダーの resync-as-of 宣 言 を 使 用 して 制 御 することができます {curl 5.0 applet} {applet manifest = "manifest.mcurl", resync-as-of = {utc-date-time "2007-01-16 12:34 +0900"} } resync-as-of 宣 言 は クライアントマシン 上 で 設 定 されている 日 時 に 基 づいて アプレ ットで 使 用 されるすべてのファイルとキャッシュされたコンテンツ(たとえば Curl パッ ケージとマニフェスト)を 同 期 するよう Curl RTE に 指 示 します すべてのファイルと 他 のキャッシュされたコンテンツが resync-as-of で 指 定 された 日 時 より 後 に 同 期 をとり クライアントにキャッシュされた 場 合 Curl RTE はアプリケーション 自 体 に 要 求 されない 限 り サーバーとそれ 以 上 の 通 信 を 必 要 としません resync-as-of 宣 言 に 指 定 する 日 時 が 変 更 されたコンテンツがはじめて Web サーバー 上 に 配 置 される 日 時 より 後 であるこ 6/8
とが 重 要 です また サーバーの 時 刻 設 定 とクライアントの 時 刻 設 定 の 差 を 考 慮 すること も 重 要 です たとえば クライアントの 時 刻 設 定 が4 時 間 サーバーからずれている 場 合 resync-as-of 宣 言 の 日 時 に 少 なくとも4 時 間 を 加 えてください (この 場 合 のクライアン トとサーバーの 時 刻 設 定 の 違 いとは タイムゾーンでの 違 いではなく マシンの 協 定 世 界 時 又 はグリニッジ 標 準 時 の 定 義 について 言 及 しています ) アプレットでの resync-as-of 宣 言 を 省 略 し 代 わりにアプレットのマニフェスト ファイ ルで 宣 言 することも 可 能 ですが より 多 くの 設 定 が 必 要 で 効 率 が 悪 いので 推 奨 しません 前 述 のように アプレットの 起 動 ファイルの 有 効 期 限 を 短 く 設 定 することが 求 められるの で ダウンロードの 負 荷 を 最 小 限 に 抑 えるためには ファイルのサイズを 小 さくしておく 必 要 があります そして 多 くの 機 能 はパッケージの 中 に 含 めてください パッケージは バイナリ 形 式 でキャッシュされるので 2 回 目 以 降 のアプレットのロード 時 間 が 短 縮 され ます アプレットの 宣 言 以 下 に 記 述 されているコンテンツを 他 のファイルに 分 散 し そ のアプレットでインクルードすることも 可 能 です それにより アプレットが 再 ロードさ れても 再 同 期 の 必 要 がない 場 合 は メインのアプレットの 起 動 ファイルだけは Web ブラ ウザによってサーバーから 取 得 される 必 要 がありますが その 他 のファイルはクライアン トの HTTP キャッシュから 取 得 できます クライアントの 設 定 クライアント 側 のコントロール パネルの 強 制 再 同 期 設 定 オプションに 依 存 しないで ください 一 般 的 に クライアントのコントロールパネルの 設 定 は 既 定 のままにしておくことをお 勧 めします Curl RTE は コントロールパネルのオプションに 強 制 同 期 を 提 供 しています しかしながら ディプロイされた Curl のアプリケーションがこの 設 定 に 依 存 することを 推 奨 しません アプリケーションを 提 供 する 側 が すべてのクライアントでこの 同 期 設 定 がなされているかを 確 かめる 方 法 がなく エンドユーザーは 容 易 に 設 定 を 変 えることがで きてしまいます クライアントの 設 定 を 変 更 することなく アプリケーションを 提 供 する 側 が 必 要 に 応 じて resync-as-of 宣 言 を 変 更 できるので アプレットに resync-as-of 宣 言 を 記 述 することを 推 奨 します アプリケーションを 提 供 する 側 が アプレットを 修 正 す る 際 に 実 際 のディプロイメント 日 時 に 近 い 値 を resync-as-of の 日 時 に 設 定 したくない 場 合 代 わりに 将 来 の 日 時 を 設 定 することができます これにより 再 ロードのたびに 強 制 的 に 同 期 が 行 われます 7/8
また Curl RTE のバージョン 4.0 と 5.0 には 既 知 のバグがあります コントロールパ ネルで 全 てのアプレットの 再 同 期 を 強 制 する を 指 定 すると バックグラウンドでパ ッケージのキャッシュを 行 う 際 に 余 分 な 同 期 が 実 行 されてしまい パフォーマンスの 低 下 を 招 きます この 問 題 は 4.0.4 パッチと 5.0.2 パッチのリリースにより 解 決 されまし た デバッグ ツール HTTP 監 視 Fiddler HTTP 監 視 ツール Fiddler は Windows のための HTTP 監 視 ツール です Fiddler は IE で 使 えるよう 設 定 されていますが 設 定 を 変 えることで Firefox でも 使 用 可 能 です LiveHTTPHeaders FireFox 拡 張 Fiddler ほど 有 用 ではありませんが FierFox に 統 合 されています Windows 上 では Curl は HTTP 通 信 レイヤを 使 用 しており このツールで Curl からの HTTP 要 求 をキャプチャ ーすることができます リファレンス HTTP プロトコル RFC 2616: HTTP/1.1 (pdf version) W3C HTTP Protocol Homepage HTTP サーバー Apache Apache HTTP Server Project Apache 2.2 HTTP Documentation Apache 2.2 HTTP Caching Guide Apache Bug Database 8/8