外部 XML のキャッシュ対策

| comment (0) | trackback (0)

作成したアプリケーションが、ウェブサーバーから XML 読み込むとき、XML を更新しても反映されないと言う事が起こります。
これは、XML ファイルがキャッシュされていることによります。

これは、プロキシサーバーによるものと考えられます。
プロキシサーバーとは、内部ネットワークからインターネット接続を行うとき、高速なアクセスや安全な通信などを確保するための中継サーバのことです。
独立したネットワークの内部から、外部のウェブサーバにアクセスしデータを受け取る場合、一度アクセスしてウェブサーバから取得したデータは、ネットワークの出入り口に設置したプロキシサーバに一時的にキャッシュされることになります。
次のアクセスからはウェブサーバではなく、このプロキシサーバからキャッシュされたデータを受け取ることができます。
これによって、データの取得を高速化させるのです。

つまり一度そのページを読んでしまうと、XML がプロキシサーバのキャッシュに残ってしまい、XML 設置サーバーの XML を更新しても反映されないということがおこるわけです。

その対策として、XML ファイルを指定する文字列にタイムスタンプを付けることで、毎回ファイルの読み込みが発生すようにします。
下記がその対策をおこなったコードです。

var xmlLoader:URLLoader = new URLLoader();
xmlLoader.dataFormat = URLLoaderDataFormat.TEXT;
xmlLoader.addEventListener(Event.COMPLETE, onXMLloaded);

var nowDate:Date = new Date();
var urlReq:URLRequest = new URLRequest("sample.xml?" + nowDate.getTime().toString());

xmlLoader.load(urlReq);

読み込む XML ファイルの名前のあとに、「 ?= 」と、現在時刻を接続します。
現在時刻は、 Date クラスのインスタンスから取得します。
これにより、ファイル名は「ファイル名+アクセスした現在時刻」というユニークな値になり、二度と同じファイル名( URL )を読み込むことはなくなり、常に新しいファイルとして外部 XML ファイルを読みに行くことにになります。

swf ファイルをキャッシュに残させない方法としては、以下のような方法があります。

swf が含まれる HTML ファイルに、キャッシュの有効期限を設定する meta 要素を追加し、content 属性を過去のものにしておきます。
過去の日付をキャッシュの有効期限にすることで、ブラウザがキャッシュの期限が切れたと認識させ、サーバーからファイルをダウンロードするようにさせます。

<meta http-equiv="Expires" content="Mon, 04 Dec 1999 20:20:20 GMT" />

次の方法は、ページキャッシュを無効にする meta 要素を追加します。

<meta http-equiv="PRAGMA" content="NO-CHACHE" />

※ これらの方法は完全なものではなく、キャッシュのファイルを表示してしまう場合があるようです。

trackback (0)

trackback URL: http://gelsol.sub.jp/core/mt-tb.cgi/54

Post your comment