小编典典

浏览器不能仅使用先前ajax调用中的缓存吗?

ajax

我试图依靠浏览器缓存来保存从jQuery中的AJAX调用返回的JSON数据。

正常的浏览器活动始终依赖于浏览器缓存。示例:重新加载页面时未重新获取jpg和gif图像。

但是,当我尝试使用jQuery getJSON ajax调用时,似乎无法避免从服务器获取数据。

我返回的标头如下所示(已通过Firebug确认):

Transfer-Encoding: chunked
Date: Wed, 05 Aug 2009 02:55:39 GMT
Content-Type: text/plain; charset=ISO-8859-1
Expires: Wed, 05 Aug 2009 03:55:39 GMT
Cache-Control: max-age=3600

但是,页面的立即刷新会导致相同的请求到达服务器。

我看过几篇关于避免缓存行为的文章,这不是我所需要的。我看过几篇有关使用缓存的文章,但是这些似乎都依赖于将数据保存在DOM中。我想要的行为就像页面重新加载期间缓存的图像一样。

难道浏览器只是从它自己的缓存中获取它?

--x–x–x–x更新–x–x–x–

令我非常失望的是,几个受人尊敬的人都认为这不仅是可能的。有人甚至辩称不应该这样(这仍然让我感到困惑)。

存根错误,我尝试了以下方法:

我在要缓存的所有传出页面上设置了Etag标头(我选择了一些表示我请求的数据的选择URL参数,并将其用作Etag值)

在下一个请求的开头,我只是检查请求中是否包含“ If-None-Match”标头。如果是这样,那么浏览器就不会像我想要的那样缓存请求,因此我发送了304
Not Modified响应。

测试表明,Firefox不会缓存我的请求(但是我仍然可以避免cgi的“获取昂贵的数据”部分),而IE6会实际缓存它(甚至不会尝试从服务器取回)。

这不是一个很好的答案,但它目前对我
有用(那些充满麻烦的图形数据全页刷新现在不会太慢或太昂贵了)。

(什么?我正在运行IE6!OMG!哦,看起来是一只松鼠!)


阅读 220

收藏
2020-07-26

共1个答案

小编典典

Ajax缓存是可能且可预测的(至少在IE和Firefox中)。

这篇博客文章讨论了Ajax缓存,并有一个演示网页:

http://blog.httpwatch.com/2009/08/07/ajax-caching-two-important-
facts/

史蒂夫·苏德斯(Steve Souders)也就F5问题进行了跟进:

http://stevesouders.com/tests/ajax_caching.php

2020-07-26