我在使用ajax缓存时遇到问题,这也是IE浏览器中的问题,但我通过编写以下代码来解决。
response.setHeader("Cache-Control", "no-cache");
response.setHeader("expires","-1");
response.setHeader("pragma","no-cache");
但是我看到MAC上的Safari4.0正在缓存Ajax请求(我们需要支持此请求)。火狐从来没有问题。关于此“过期”,我将其设置为-1,我看到很多地方都将其设置为0或过去的某个旧日期。会有所作为吗?
在GET请求中发送一个额外的参数,该参数将永远不会相同,例如,当前时间戳。类似于:
url = url + '&nocache=' + new Date().getTime();
这将防止缓存。
首先,请注意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