戯言

つらつらと気づいたことを書いていきます。人狼とか。

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

RESTを利用したアクセスで、IEでは最新の情報を取得できない


IEでは、RESTを利用したアクセスで、サーバ側の最新の情報を取得できなかった。ブラウザ側にキャッシュされているらしく、サーバ側から渡すデータが変更になっているのに、サーバに再アクセスしても変更前のデータが表示されてしまう。Chromeでは問題ないのに…。
Webサーバへのアクセス状況などを調べていたら、やはりIEではキャッシュした情報を表示していて、サーバと通信していなかった。

この事象を回避するためには、サーバ側からブラウザに、キャッシュしないように指示するレスポンスを返しておく必要があります。

キャッシュ関係はブラウザ側やサーバ側でヘッダやブラウザ固有の事象など、いろいろと絡んできて厄介なんですが、とりあえずこれくらいのヘッダーを付与しておけば、いろんなブラウザでも大丈夫になるらしい。

"Cache-Control"に、"no-cahce"
"Pragma"に、 "no-cahce"
"Expires"に、 "-1"

さっそく、JerseyでHTMLレスポンスのヘッダに、これらを付与しようとしていたら、
javax.ws.rs.core.Response.ResponseBuilder.cacheControl(CacheControl arg0)
javax.ws.rs.core.Response.ResponseBuilder.expires(Date arg0)

などという、Jerseyの便利そうな名前のメソッドを発見したので、使ってみました。

CacheControl cc = new CacheControl();
cc.setNoCache(true);
return response.cacheControl(cc).expires(new Date(0))

こうすれば、上記3つのヘッダを上手いこと送ってくれます。
new Date(0) など指定しているので、valueは変わります。

もちろん、このメソッドは使わずに、javax.ws.rs.core.Response.ResponseBuilder.header(String arg0, Object arg1)を利用して、一つひとつヘッダを付与する方法でも可能です。

これで、IEでもキャッシュを使用せずに、サーバにアクセスしてくれるようになりました。




関連記事

管理者にだけ表示を許可する
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。