我遇到了一个问题,在大多数情况下(主要使用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做了两个请求,第一个是直接完成的,几乎从不被浏览器缓存。第二个是在1秒后用计时器完成的,并且没有问题地被缓存。 这两个请求都具有相同的头,并转到相同的Servlet,唯一的区别是“v”参数,用于区分这两个。
答案 0 :(得分:0)
现在我没有在您的展示中看到“查询/测试”请求,但是我看到的所有XHR请求都没有针对浏览器的任何缓存说明。默认情况下,浏览器不会缓存XHR请求,b / c作为规则,此类请求必须带来最新鲜的数据。但是如果你想强制浏览器缓存它们,只需在客户端将Cache-Control添加到请求头中。我不能指定具体的规则,因为我不知道你对它的要求 - 至少它应该保留数据的时间。
请参阅RFC:“Caching in HTTP”以及关于http缓存的精彩文章:“Caching Tutorial”。
希望这有帮助。