2014-01-21 57 views
0

我試圖通過XHR訪問REST服務器上的資源,因爲我想下載它。Firefox緩存鍵名以anon&uri開頭= http:// xxxx

<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第一個請求是「匿名& URI」開始,所以緩存關鍵是像「 anon & uri = http://example.com/document/12345「,並且當前頁面和url不在同一個域中,並且我已經爲服務器設置了CORS,然後第二個請求不能從緩存中獲得PDF文件,並且如果我將2服務器放在同一個域下,緩存密鑰是沒有「anon & uri」的正常密鑰,則代碼正在工作。

任何人都知道爲什麼緩存鍵是以「anon & uri =」開頭的,當我爲FF上的兩臺服務器設置CORS時,以及如何避免此問題並使代碼正常工作。

感謝,

喬伊

回答

0

您可以在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; 

    } 
} 
0

緩存鍵以「anon &」開頭因爲它是一個匿名(不允許cookie,不允許http認證)請求,因此不應該像緩存在同一個緩存條目中那樣作爲對同一個URI的正常請求。

在一般情況下具有明智的緩存行爲時,您無法做到您想要做的事情。