浏览器不能只使用之前的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
然而,立即刷新页面会导致相同的请求命中服务器。
我已经看过几篇关于避免缓存行为的post,这不是我需要的。 我已经看过几篇关于利用缓存的post,但这些似乎都依赖于在DOM中保存数据。 我想要的东西就像缓存图像在页面重新加载时一样。
浏览器是否只能从它自己的缓存中获取它?
–x – x – x – x UPDATE –x – x – x–
令我失望的是,几位受人尊敬的人都认为这不仅是可能的。 有些人甚至认为它不应该(这仍然让我感到困惑)。
Stubburn故障,我尝试了以下几点:
我在要缓存的所有传出页面上设置了Etag标头(我选择一些选择URL参数来表示我正在请求的数据,并将其用于Etag值)
在下一个请求开始时,我只需检查请求中是否有“If-None-Match”标头。 如果是这样,那么浏览器不会像我想要的那样缓存请求,所以我发送了304 Not Modified响应。
测试显示Firefox不会缓存我的请求(但我仍然可以避免’获取我的cgi的昂贵数据’部分),而IE6实际上会缓存它(甚至不会尝试从服务器取回)。
这不是一个很好的答案,但它现在对我有用
(图形数据的那些完整的页面刷新现在不会那么慢或昂贵)。
(什么?我正在运行IE6!天啊!哦,看起来像一只松鼠!)
Ajax缓存是可行且可预测的(至少在IE和Firefox中)。
这篇博客文章讨论了Ajax缓存并有一个演示网页:
http://blog.httpwatch.com/2009/08/07/ajax-caching-two-important-facts/
还有史蒂夫·索德斯关于F5问题的跟进:
最简洁的答案是不。 不幸的是,浏览器不能以与“普通”页面相同的方式可靠地缓存AJAX请求。 (虽然数据实际上可能是缓存的,但是在按照您期望的方式处理AJAX请求时,浏览器通常不会使用缓存。)这将在未来发生变化,但是现在您必须解决它。
您可能希望使用Resource Expert Droid检查资源,以确保它们正在执行您的操作。 您还应该运行网络跟踪以使用Wireshark之类的内容仔细检查请求和响应标头,以防Firebug没有说明完整的故事。
jQuery可能以浏览器决定绕过缓存的方式包含一些请求标头。 您是否尝试过没有框架的简单XMLHTTPRequest
?
虽然不是“浏览器缓存”会话状态或其他forms的客户端保存。 您仍然需要查看评论中提到的if修改后的情况。
由于json确实动态检索并且缓存中的内容是静态的,因此浏览器本身不会知道数据是否已更改。 我认为?
在作者声称ajax浏览器缓存确实可靠之后,在此处找到了相关链接。
索赔在这里找到: http : //davidwalsh.name/cache-ajax
链接到这里: http : //ajaxref.com/ch6/builtincache.html