戯言

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

スポンサーサイト


上記の広告は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でもキャッシュを使用せずに、サーバにアクセスしてくれるようになりました。




スポンサーサイト

これは英語のページです。翻訳しますか?


Chromeで閲覧していると、日本語のサイトなのに「これは英語のページです。翻訳しますか?]と表示される場合があります。このブログもそうでしたが、修正しました。

次のように、meta タグで日本語を指定すると回避できます。



文書の内容に英語の割合が多いと、英語のページだと判断してしまうと、いろんなサイトに書いてありますが、本当なんでしょうか? meta タグを見てるだけでは?(確かめてはいません^^;)


エラー:このオブジェクトではサポートされていない操作です。


IEで、JavaScriptでstart()という名前の関数を作成して実行すると、

  エラー:このオブジェクトではサポートされていない操作です。

というエラーが出ます。
Firefoxでは出ません。

原因を特定するのに、かなり時間がかかりました。
名前をstartから別の名前に変えれば解決します。
startは予約語でもないのに、なぜエラーになるのだろう。恐るべし、IE。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。