2010-12-13 76 views
3

我有一個加載改變偶爾數據的一大塊Flash應用程序,所以我建立了我的服務器發送Last-Modified頭,當客戶端版本是不是已經過時了304 Not Modified回覆。修復Flash的積極的緩存

它在每個瀏覽器都能正常工作,但Flash完全忽略了這一點,並積極緩存資源。它甚至不會向服務器發送請求,它只是在您嘗試訪問先前訪問的URL的URLLoader.load時從磁盤中檢索緩存的文件。

我在google上找到的解決方法對我沒有幫助 - 無論是永久緩存還是每次重新下載資源(更改URL參數)。我需要這些的混合 - 當資源更新時重新下載,否則使用高速緩存。

+1

如何在存儲本地共享對象的版本號客戶端的機器來跟蹤他們的最新下載。如果共享對象不存在,則是用戶的第一次訪問。如果存在,請檢查存儲在共享對象中的日期與服務器上的最後修改日期。如果客戶有舊的下載,更新,否則不要。如果客戶端需要下載的文件具有相同的名稱/自動緩存,請在結尾處使用帶有隨機數的舊url技巧(例如'FileForDownload.zip?r='+new Date()。milliseconds or Math.random ()) – 2010-12-13 18:45:02

回答

4

你可以使用一個版本號爲URL參數...這樣就不會每次都重新下載Flash Player的負荷,只有當你真正改變

+0

是的,我意識到發佈這個問題後的幾秒:) – lzm 2010-12-13 18:54:18

+1

+1:使用當前的時間戳也很適合使URL唯一,從而防止緩存。 – bedwyr 2010-12-13 18:56:32

1

我不知道這是否會奏效,但值得一試。

您可以嘗試將緩存斷開程序代碼附加到文件請求。通常,您可以通過在文件名的末尾附加一個隨機字符串來完成此操作,例如new URLRequest("bigFile.foo?uncache=273095285209750")。對於你而言,你可以使用一個日期對象來生成字符串,而不是使用隨機字符串。例如...

var now:Date = new Date(); 
var request:URLRequest = new URLRequest("bigFile.foo?uncache=" + new Date(now.year, now.month, now.date)); 

這將有望強制內容每天(或小時或無論你經常想要)重新緩存一次。如果你需要更細化的控制,你可以編寫一個簡短的服務器端腳本來查看文件是否被修改,並在請求巨大的下載之前檢查它。

我希望這有助於!