我试图通过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 =”开头,以及如何避免此问题并使代码正常工作。
谢谢,
乔伊
答案 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的正常请求相同的缓存条目中缓存。
一般情况下,你不能做你正在尝试做的事情。