作成したアプリケーションが、ウェブサーバーから 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" />
※ これらの方法は完全なものではなく、キャッシュのファイルを表示してしまう場合があるようです。
Post your comment