Firefox缓存密钥名称以anon& uri = http:// xxxx开头

时间:2014-01-21 17:52:50

标签: javascript rest firefox caching xmlhttprequest

我试图通过XHR访问REST服务器上的资源,因为我想下载它。

 <script type="text/javascript">
     function iframe_onload (){

     var xmlhttp=new XMLHttpRequest();
     var url = "http://example.com/document/12345"

     xmlhttp.open("GET", url, true);
     xmlhttp.setRequestHeader("accept","application/pdf");

     xmlhttp.onload = function() {

     var oIFrm = document.getElementById('myIFrm');
     oIFrm.src = url; 

    };

    xmlhttp.send(null);
   }


<iframe id="myIFrm"  style="visibility:hidden" src="">  
</iframe>

它正在使用Chrome,Safari,IE,但只是没有使用FF,我检查了FF中的缓存,XHR的第一个请求是以“anon&amp; uri”开头,所以缓存键就像“anon&amp; uri = http://example.com/document/12345“,当前页面和网址不在同一个域中,我为服务器设置了CORS,然后第二个请求无法从缓存中获取PDF文件,如果我将2个服务器放在同一个域下,缓存键是没有“anon&amp; uri”的普通键,然后代码正常工作。

当我为FF上的两个服务器设置CORS时,任何人都知道为什么缓存键以“anon&amp; uri =”开头,以及如何避免此问题并使代码正常工作。

谢谢,

乔伊

2 个答案:

答案 0 :(得分:0)

您可以在网址的末尾附加时间戳,以便不缓存该页面:

var now=Date();
var heartbeat=now.getTime();
oIFrm.src = url+'?'+heartbeat;

同时将onload更改为onreadystatechange:

xmlhttp.onreadystatechange = function(){
  if (xmlhttp.readyState==4 && xmlhttp.status==200){
    var now=Date();
    var heartbeat=now.getTime();
    var oIFrm = document.getElementById('myIFrm');
    oIFrm.src = url+'?'+heartbeat;

  }
}

答案 1 :(得分:0)

缓存键以“anon&amp;”开头因为它是匿名的(没有cookie,没有允许http auth)请求,因此不应该在与同一URI的正常请求相同的缓存条目中缓存。

一般情况下,你不能做你正在尝试做的事情。