イナヅマTVログ

ActionScript 3, URLRequestをcacheさせないためのtimestamp

| 0件のコメント

URLRequestを使ってサーバーからデータを取得する時に問題となるのがキャッシュ。
これswfでもAIRでも同様の大問題です。
GET, POSTなどでパラメタを変更してリクエストしているのに毎回同じ値が返ってきてしまいます。

AIRには cacheResponse, useCache といかにも使えそうなプロパティが用意されているのですが、false 設定してもやっぱりキャッシュされます。

header に "no-cache" を追加してもキャッシュされてしまいます。

var req:URLRequest = new URLRequest('examle.com');
var header:URLRequestHeader = new URLRequestHeader("pragma", "no-cache");
var headerCacheCtrl:URLRequestHeader = new URLRequestHeader("cache-control", "no-chache");
var headerExpires:URLRequestHeader = new URLRequestHeader("expires", "Sun, 10 Jan 1990 01:01:01 GMT");
 
req.requestHeaders.push(header);
req.requestHeaders.push(headerCacheCtrl);
req.requestHeaders.push(headerExpires);

リクエストにタイムスタンプも追加してるのになぜなぜ?と右脳と左脳をフル回転させました。

タイムスタンプの設定をしくじっておりました。

【キャッシュされてしまうタイムスタンプ設定】

var req:URLRequest = new URLRequest('examle.com');
var variables:URLVariables = new URLVariables();
variables.timestamp = new Date().getTime().toString();
 
req.data = variables;

【キャッシュされないタイムスタンプ設定】

var req:URLRequest = new URLRequest('examle.com' + '?' + new Date().getTime().toString());

解決すればなんてことない勘違い。
URLそのものにタイムスタンプを付加しないといけませんよねぇ。

以前はどうしてたんだろうとコードをあさってみたらちゃ〜んとURLにくっ付けてました。
なんで今回だけ勘違いしてたんかんなぁ。

ちなみにURLにタイムスタンプをつけたら cacheResponse, useCache "no-cache" もいりません。

いましめのためにブログっておきます。

コメントを残す

必須欄は * がついています


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください