ajax - 浏览器不能只使用之前 ajax 调用的缓存吗?

标签 ajax http caching jquery

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

正常的浏览器事件始终依赖于浏览器缓存。 示例:jpg 和 gif 图像不会在页面重新加载时重新获取。

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

我返回的 header 如下所示(通过 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 header (我选择了一些代表我请求的数据的 URL 参数,并将其用于 Etag 值)

在下一个请求开始时,我只是检查“If-None-Match” header 是否在请求中。如果是这样,那么浏览器就没有像我想要的那样缓存请求,所以我发送了 304 Not Modified 响应。

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

这不是一个很好的答案,但它现在对我有用
(那些讨厌的整页图形数据刷新现在不会那么慢或昂贵)。

(什么?我正在运行 IE6!天哪!哦,你看是一只松鼠!)

最佳答案

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

关于ajax - 浏览器不能只使用之前 ajax 调用的缓存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1230998/

相关文章:

asp.net - 监听事件: in HTML from . NET

python - HTTP/1.1 400 错误请求。命令部分数量错误

mysql - mysql表的重新计数或缓存计数

javascript - 从工厂请求数据并将数据返回到同一工厂以在 Controller 之间共享

javascript - Uncaught Error : Route parameter missing: id - Javascript console

ASP.Net MVC 自定义身份验证

php - 5 分钟长轮询示例的简单指南不起作用

http - 304 和 200 的区别(来自磁盘缓存)

javascript - AngularJs $http.get : Sending array of objects as params

facebook - 如何清除调试工具缓存数据?