如何禁用Ajax缓存?

问题描述 投票:10回答:3

我在使用ajax缓存时遇到问题,这也是IE浏览器中的问题,但我通过编写以下代码来解决。

    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("expires","-1");
    response.setHeader("pragma","no-cache");

但是我看到MAC上的Safari4.0正在缓存Ajax请求(我们需要支持此请求)。火狐从来没有问题。关于此“过期”,我将其设置为-1,我看到很多地方都将其设置为0或过去的某个旧日期。会有所作为吗?

java javascript ajax caching safari
3个回答
13
投票

在GET请求中发送一个额外的参数,该参数将永远不会相同,例如,当前时间戳。类似于:

url = url + '&nocache=' + new Date().getTime();

这将防止缓存。


3
投票

首先,请注意Expires标头上的注释。您的问题没有指定您使用的服务器框架,所以我不确定这是否适用。但是,您似乎正在发送无效的Expires标头。

RFC requires Expires to be a date,但是您似乎正在将标题设置为文字Expires。许多框架在其HTTP响应对象上具有expires属性,该属性采用int并自动计算从现在起秒数的日期。

使用"-1"确保您的服务器发送的是有效格式的日期,而不是HTTP inspector标头中的-1


您可以尝试使Expires标头更具限制性:

Cache-Control

response.setHeader("Cache-Control", "private, no-cache, no-store, must-revalidate"); 告诉缓存,它们必须遵守您提供给它们的任何新鲜度信息。 HTTP允许缓存在特殊条件下提供过时的表示形式。通过指定此标头,便是告诉缓存要严格遵守规则。 must-revalidate


1
投票

根据关于POST的[1]第9.5节

RFC 2616

因此,浏览器必须缓存POST响应,除非响应中另有说明。同时,浏览器may缓存GET响应,除非响应另有说明。因此,对于不应被缓存的请求(例如AJAX请求),POST是首选方法。

如果您出于任何原因不想使用POST进行AJAX,则应使用minitech提及的trick,实际上,它广泛用于强制浏览器加载当前版本的任何资源。

© www.soinside.com 2019 - 2024. All rights reserved.