IEでAjaxリクエストをキャッシュさせない方法 - PHPプロ!ニュース [www.phppro.jp]
IEの場合Ajaxを用いた通信を行うと、GETメソッドの場合一度実行されるとデータがキャッシュされて、2回目以降の通信はそのキャッシュされたデータを読みに行くようになってしまいます。
そこでJaslabsでは、その対策として2つの策を提示しています。1つめは、GETメソッドを辞めてPOSTメソッドを使う方法です。POSTメソッドの場合、GETメソッドと異なりこちらは2回目以降の通信でもキャッシュされることなくサーバのデータを取得します。
定番。
2つめの策は、GETメソッドで取得する先のURLにユニークIDを付加する方法です。下記のようにここではユニークIDとしてタイムスタンプを付加しています。
あーこれ古籏さんのところでこれやってたからそのままマネしてやったんですけれども、IE のキャッシュがそのタイムスタンプを付加したやつでいちいち生成されてひどいことになっていました。
▲これひとつひとつが32KB取るんだぜ(うちのMebiusはデフォがFAT32)
つうわけで、結局これだけではダメで、HTTP のヘッダをいじる必要がありました。
うちのサーバ側は Perl なので、こんな感じでした。
use CGI;
my $q = CGI->new();
print $q->header(
-Pragma => 'no-cache',
-Cache_Control=> 'no-store',
-Expires => 'now',
);
print $hoge;
これやっちゃうと、タイムスタンプ付加したユニークな URL にしている意味が不明になってしまうのが難点。
~~~
つまり、タイムスタンプ付加による方法は、その場しのぎであって、結果としては利用者の IE のキャッシュにゴミを残す方法になっていることに注意をしないといけません。