当前位置: 首页 > 面试题库 >

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

令狐唯
2023-03-14
问题内容

我试图依靠浏览器缓存来保存从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!哦,看起来是一只松鼠!)


问题答案:

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



 类似资料:
  • 问题内容: 好像我使用加载动态内容,结果缓存在浏览器中。 在QueryString中添加一些随机字符串似乎可以解决此问题(我使用),但这听起来像是一种hack。 还有其他方法可以做到这一点吗?或者,如果唯一字符串是实现此目标的唯一方法,则除之外还有其他建议吗? 问题答案: 我使用,这将避免冲突,除非您在同一毫秒内发生多个请求: 编辑: 这个答案已经好几年了。它仍然有效(因此我没有删除它),但是 现

  • 问题内容: 我想在javascript /浏览器中启用ajax响应的缓存。 从jquery.ajax docs : 默认情况下,始终发出请求,但浏览器可能会在其缓存之外提供结果。要禁止使用缓存的结果,请将cache设置为false。如果自上次请求以来未修改资产,则导致请求报告失败,请将ifModified设置为true。 但是,这些地址都没有强制缓存。 动机: 我想在我的初始化函数中放入调用,其中

  • 我为google speed insight工作,它要求利用浏览器缓存 我已经添加了代码。htaccess如下所示 js文件没有生效,我的js文件内容类型是应用程序/javascript,因为我通过检查检查了这些。 我的代码有什么问题?我也试过了 但它并没有得到任何改进,而且文件中也并没有添加过期日期。 有人能帮忙吗?

  • 推荐: http://www.cnblogs.com/skynet/archive/2012/11/28/2792503.html 304 Not Modified

  • 本文向大家介绍浅谈Ajax请求与浏览器缓存,包括了浅谈Ajax请求与浏览器缓存的使用技巧和注意事项,需要的朋友参考一下 在现代Web应用程序中,前端代码充斥着大量的Ajax请求,如果对于Ajax请求可以使用浏览器缓存,那么可以显著地减少网络请求,提高程序响应速度。 1. Ajax Request 使用jQuery框架可以很方便的进行Ajax请求,示例代码如下: 非常简单,注意其中的第4行代码:ca

  • 问题内容: 有谁知道如何编写一个servlet过滤器,该过滤器将在给定文件/内容类型的响应上设置缓存头?我有一个提供大量图像的应用程序,我想通过让浏览器缓存那些不经常更改的图像来减少托管它的带宽。理想情况下,我希望能够指定一种内容类型,并在内容类型匹配时让它设置适当的标题。 有人知道该怎么做吗?或者,甚至更好的是,他们愿意共享示例代码吗?谢谢! 问题答案: 在您的过滤器中有以下行: 响应包装如下所