如何检查浏览器缓存是否已禁用

时间:2012-02-08 23:59:14

标签: c# javascript caching browser

在Javascript或C#中是否有一种方法可以判断某人使用的浏览器是否禁用了静态内容的缓存?

我需要能够测试浏览器是否针对缓存进行了优化。

3 个答案:

答案 0 :(得分:2)

<强>更新

我对此问题进行了更多调查,您可以找到更详细的answer in my recent post 注意,下面描述的解决方案(最初)不是跨浏览器解决方案。

不确定是否有帮助,但您可以尝试以下技巧: 1.向您的页面添加一些资源,假设它将是javascript文件cachedetect.js。 2.每次有人请求时,服务器都应生成cachedetect.js。并且它应包含响应中与缓存相关的标头,即如果启用了浏览器的缓存,则应该长时间缓存资源。每个cachedetect.js应如下所示:

var version = [incrementally generated number here];
var cacheEnabled; //will contain the result of our check
var cloneCallback;//function which will compare versions from two javascript files

function isCacheEnabled(){
   if(!window.cloneCallback){
       var currentVersion = version;//cache current version of the file
       // request the same cachedetect.js by adding <script> tag dynamically to <header>
       var head = document.getElementsByTagName("head")[0];
       var script = document.createElement('script');
       script.type = 'text/javascript';
       script.src = "cachedetect.js";
       // newly loaded cachedetect.js will execute the same function isCacheEnabled, so we need to prevent it from loading the script for third time by checking for cloneCallback existence       
       cloneCallback = function(){
           // once file will be loaded, version variable will contain different from currentVersion value in case when cache is disabled 
           window.cacheEnabled = currentVersion == window.version;        
       };      
       head.appendChild(script);

    }  else {
        window.cloneCallback();
    }   
}

isCacheEnabled();

之后,您可以在一段时间后检查cacheEnabled === truecacheEnabled === false

答案 1 :(得分:0)

我相信这应该有效:http://jsfiddle.net/pseudosavant/U2hdy/

基本上你必须预先加载一个文件并检查它花了多长时间。第二次应该不到10毫秒(在我自己的测试中)。您需要确保您正在测试的文件足够大,以至于需要一点点下载,但它不一定非常大。

var preloadFile = function(url){
    var start = +new Date();
    var file = document.createElement("img");
    file.src = url;
    return +new Date() - start;
};

var testFile = "http://upload.wikimedia.org/wikipedia/en/thumb/d/d2/Mozilla_logo.svg/2000px-Mozilla_logo.svg.png"
var timing = [];
timing.push(preloadFile(testFile));
timing.push(preloadFile(testFile));

caching = (timing[1] < 10); // Timing[1] should be less than 10ms if caching is enabled

答案 2 :(得分:0)

涉及客户端和服务器的另一种方法。

  1. 调用页面/端点,这将在响应中设置随机唯一ID。设置此页面/端点的缓存标头
  2. 再次拨打同一个电话,这将设置不同的唯一号码
  3. 如果数字匹配则来自缓存或来自服务器