我怎样才能保证缓存ajax响应?

时间:2009-05-21 12:22:26

标签: jquery ajax

我想进行ajax调用,但我想确保它会被缓存。 我正在使用jquery。

有没有办法确保请求保留在大多数流行浏览器的缓存中?

4 个答案:

答案 0 :(得分:8)

使用jQuery,您可能希望使用ifModified选项显式添加If-Modified-Since标头,默认情况下为false:

$.ajax({
     ...
     ifModified: true,
     ...
});

如果您的数据类型为cachejsonp,则还需要script选项强制为true。对于其他数据类型,默认情况下都是如此。

有关这些选项的说明,请参阅jQuery.ajax() docs

答案 1 :(得分:2)

浏览器可以缓存GET请求(取决于浏览器缓存大小等),但不会缓存POST。

问候。

答案 2 :(得分:1)

在http响应上设置适当的标头,例如Expires标头和Cache-control指令。

有关详细信息,请参阅here,但简而言之,您需要设置标题以指示:

  • 资源应缓存一段时间(过期标题)
  • 资源是可缓存的(Cache-control:public header)

或者,您可能希望让用户请求文件,但发回“未修改的resposne”,这样可以节省重新下载正文(对于大文件)。在这种情况下,您应该使用响应标头来指示

  • 上次修改资源时(上次修改时间标题),允许客户端告诉服务器版本的年龄
  • 文件的电子标签,它是一种哈希码,可让服务器知道客户端的版本。注意如何生成电子标签......在某些服务器上,etags会破坏负载平衡。

这两种方法将让客户端缓存响应,并减少重新下载响应的次数。此外,我喜欢避免在可缓存的响应中设置cookie,因为一些缓存不会缓存具有cookie的响应,并且一些缓存会缓存响应,包括cookie,这两者都可能是不合适的。

答案 3 :(得分:1)

我认为除非您指定不缓存,否则所有AJAX响应都会被缓存。您还可以查看jQuery Cache(?)。