【问题标题】:Clear IE cache when using AJAX without a cache busting querystring, but using http response header使用 AJAX 时清除 IE 缓存而不使用缓存破坏查询字符串,但使用 http 响应标头
【发布时间】:2012-01-24 14:05:05
【问题描述】:

我遇到了经典的 IE-caches-everything-in-Ajax 问题。我有一点数据每分钟刷新一次。

研究了论坛后,解决方案归结为以下选项(http://stackoverflow.com/questions/5997857/grails-best-way-to-send-cache-headers-with-every-ajax-call):

  • 向查询字符串添加缓存清除令牌(如 ?time=[timestamp])
  • 发送一个HTTP响应头,专门禁止IE缓存请求
  • 使用 ajax POST 而不是 GET

不幸的是,明显的查询字符串或“缓存:假”设置对我不起作用,因为更新的数据文件托管在 Akamai Netstorage 上并且不能接受查询字符串。我也不想使用 POST。

我想要做的是尝试发送一个 HTTP 响应标头,专门禁止 IE 缓存请求,或者如果其他人知道另一个缓存破坏解决方案??

有谁知道如何做到这一点?任何帮助将不胜感激。

这是我的代码:

(function ($) {
var timer = 0;
var Browser = {
    Version: function () {
        var version = 999;
        if (navigator.appVersion.indexOf("MSIE") != -1) version = parseFloat(navigator.appVersion.split("MSIE")[1]);
        return version;
    }
}
$.fn.serviceboard = function (options) {
    var settings = { "refresh": 60};

    return this.each(function () {
        if (options) $.extend(settings, options);
        var obj = $(this);
        GetLatesData(obj, settings.refresh);
        if (settings.refresh > 9 && Browser.Version() > 6) {
            timer = setInterval(function () { GetLatestData(obj, settings.refresh) }, settings.refresh * 1000);
        }
    });
};
function GetLatestData(obj, refresh) {
    var _url = "/path/updated-data.htm";
    $.ajax({
        url: _url,
        dataType: "html",
        complete: function () {},
        success: function (data) {  
            obj.empty().append(data);               
            }
        }
    });
}
})(jQuery);

【问题讨论】:

    标签: ajax internet-explorer caching http-headers browser-cache


    【解决方案1】:

    在 GET 请求中添加一个随机数,这样 IE 就不会在其缓存中将其识别为“相同”。这个数字可能是一个时间戳:

    new Date().getTime()
    

    EDIT 可能会创建请求的 url:

    var _url = "/path/updated-data.htm?" + new Date().getTime()
    

    我认为这不会导致任何错误。

    EDIT2 抱歉,我只是稍微阅读了一下您的帖子,发现这不适合您。

    您说“托管在 Akamai 上,不能接受查询字符串”,但为什么不呢? 我从来没有听说过一个页面不接受额外的:“?blabla”,即使它是 html。

    【讨论】:

    • 我应该提到的是数据文件托管在不允许查询字符串的 Akamai Netstorage 上。不幸的是,您在 Akamai 中传递了一个查询字符串,它从 Origin 服务器中提取,我们希望避免 Origin 上的流量负载过重。
    【解决方案2】:

    这让我发疯了。我尝试了许多缓存破坏技术并设置缓存标头。其中有很多要么不起作用,要么是野鹅追逐。我发现测试正常工作的唯一解决方案是设置:

    Header Pragma: no-cache
    

    我希望它能拯救其他人的 IE 头痛。

    【讨论】:

      猜你喜欢
      • 2017-11-29
      • 1970-01-01
      • 2013-07-24
      • 2020-03-25
      • 2015-06-06
      • 2016-11-05
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多