随机查询字符串,以避免IE缓存

Est*_*ber 10 html query-string

一个众所周知的问题是IE缓存了太多的html,即使给每个页面都有一个Cache-Control: no-cacheLast-Modified标题.

在使用查询字符串获取动态信息时,这种行为确实令人不安,因为IE认为它是同一页面(即:)http://example.com/?id=10并提供缓存版本.

我已经解决了它在查询字符串中添加随机数或时间字符串(正如其他人所做的那样)http://example.com/?id=10&t=2009-08-06_13:12:56,我只是忽略了服务器端.

有更好的选择吗?是否有另一种更清洁的方式来实现这一目标?我知道它POST没有被缓存,但GET在这里使用它是语义上正确的.

Sim*_*Fox 11

假设您使用的是jQuery,而不是使用$ .get或$ .getJson,请使用更通用的$ .ajax并将缓存值显式设置为false.以下是一个例子:

$.ajax({
        url: "/Controller/Action",
        cache: false,
        type: "GET",
        dataType: "json",
        success: function(data, textStatus) {
                         alert("success");
                 }
    });
Run Code Online (Sandbox Code Playgroud)

需要更多的代码(虽然不多),而不是使用.getJson或.get但是会干净地解决问题,而不会附加随机数.


Sin*_*our 6

您还可以使用当前的Unix时间(以毫秒为单位)来避免一秒钟内出现多个请求的问题(在一毫秒内发出多个请求的可能性要小得多)

var url = "http://whatever.com/stuff?key=value&ie=" + (new Date()).getTime();
Run Code Online (Sandbox Code Playgroud)


Est*_*ber 2

因此,最后,唯一可靠的方法(感谢 IE6)是使用 随机有时限的 查询字符串。

您可以使用 仅每 15 秒(或任何其他时间量)更改一次的时间限制查询字符串 ,这样您就可以降低服务器命中计数,因为您会看到这 15 秒内本地缓存的内容。

如果您有 一个 兼容标准的 浏览器,那么您可以只使用 ETags