Javascript Firefox缓存密钥名称以anon开头&;uri=http://xxxx
我试图通过XHR访问REST服务器上的资源,因为我想下载它Javascript Firefox缓存密钥名称以anon开头&;uri=http://xxxx,javascript,rest,firefox,caching,xmlhttprequest,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.setRequ
<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>
函数iframe\u onload(){
var xmlhttp=new XMLHttpRequest();
变量url=”http://example.com/document/12345"
open(“GET”,url,true);
setRequestHeader(“接受”、“应用程序/pdf”);
xmlhttp.onload=函数(){
var oIFrm=document.getElementById('myIFrm');
oIFrm.src=url;
};
xmlhttp.send(空);
}
它在Chrome、Safari、IE上工作,但在FF上不工作,我在FF中检查了缓存,XHR的第一个请求以“anon&uri”开头,所以缓存键类似于“anon&uri=”,当前页面和url不在同一个域中,我为服务器设置了CORS,然后第二个请求无法从缓存中获取PDF文件,如果我把2台服务器放在同一个域下,缓存密钥是没有“anon&uri”的普通密钥,那么代码就正常工作了
当我在FF上为两台服务器设置CORS时,有人知道为什么缓存密钥以“anon&uri=”开头,以及如何避免这个问题并使代码正常工作吗
谢谢
Joey您可以在url末尾附加一个时间戳,这样页面就不会被缓存:
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;
}
}
缓存键以“anon&”开头,因为它是一个匿名(不允许cookies,不允许http身份验证)请求,因此不应缓存在同一个缓存项中,作为对同一URI的正常请求
一般来说,如果缓存行为正常,则无法执行此处尝试执行的操作