ほとんどの場合 (主に FireFox で) onModuleLoad イベントで行われたリクエストがキャッシュされないという問題に直面しました。FireBug でネットワーク コンソールを確認したところ、ほとんどの場合、このような種類のリクエストがキャッシュからではなくサーバーからフェッチされていることが示されています。
テスト ケースを用意しました。http://tradeosam.appspot.com/で確認できます。
onModuleLoad の実装は次のとおりです。
public void onModuleLoad() {
RequestBuilder request = new RequestBuilder(RequestBuilder.GET,
"query/test?v=1-8951245");
try {
request.sendRequest(null, new RequestCallback() {
@Override
public void onResponseReceived(Request request,
Response response) {
}
@Override
public void onError(Request request, Throwable exception) {
}
});
} catch (RequestException e) {
}
new Timer() {
@Override
public void run() {
RequestBuilder request = new RequestBuilder(RequestBuilder.GET,
"query/test?v=1-23478.34");
try {
request.sendRequest(null, new RequestCallback() {
@Override
public void onResponseReceived(Request request,
Response response) {
}
@Override
public void onError(Request request, Throwable exception) {
}
});
} catch (RequestException e) {
}
}
}.schedule(1000);
}
コードからわかるように、onModuleLoad の 2 つのリクエストを実行します。最初のリクエストは直接実行され、ブラウザによってキャッシュされることはほとんどありません。2 つ目は 1 秒後にタイマーで実行され、問題なくキャッシュされます。これらのリクエストは両方とも同じヘッダーを持ち、同じサーブレットに送信されます。唯一の違いは、2 つを区別するために使用される「v」パラメータです。