2009-11-26 74 views
5

我有一個問題與緩存失效技術有關......我試圖爲我的網站實現一種機制,它會自動使瀏覽器緩存(CSS,圖像...)失效。我希望能夠以編程方式使瀏覽器緩存無效,只要我更新網站(更改圖像或樣式);ASP.NET - 使瀏覽器緩存無效

例如:對於當前版本,其中包括css和一些圖像已更改。在這種情況下,我希望更新完成後,當用戶對網站執行請求時,瀏覽器的緩存會自動失效,從而迫使重新下載新的圖像和樣式。這應該只針對客戶端的第一個請求完成......應該從緩存中檢索以下內容(因此設置no-cache雜注是不可能的)。

這裏就是我已經試過:在BeginRequest事件處理程序 ,我加了以下幾行: Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate); Response.Cache.SetETag(「\」e111293b17594f1487d136ea7e9314ac \「」);

這會在響應頭文件中設置ETag。我想,如果我在每個版本中更改這個ETag,並在每個請求中設置它,緩存將失效,但它似乎不是。我使用Live HTTP標頭查看結果,並且ETAG正確設置了響應,但css和圖像仍然從緩存中獲取....

任何有關如何完成此操作的想法,或者如果它可以完成嗎?

在此先感謝!

回答

5

我遇到過這樣的問題。不幸的是,我找不到一個非常好的方法來完成這個工作,所以我不得不提出一個解決方法。我只是處理這個問題的CSS文件,所以我增加了一個額外的查詢字符串參數,每一個CSS引用,例如

<link rel="stylesheet" type="text/css" 
     href="default.css?buildnumber=<%= Buildnumber %>" /> 

內部版本號在每個版本中增加這樣瀏覽器就被迫去尋找新文件。不是一個理想的解決方案,但它運作順利。

+0

這是一個不錯的主意,但是圖像怎麼樣......將項目查詢參數放置到項目中的每個圖像參考文件中並不是那麼容易......感謝您的答案 – GeoXYZ 2009-11-26 19:36:40

+0

這應該仍然適用於圖像。也許如果你的所有圖像都是服務器控件,你可以重寫一個頁面事件,也許是渲染,並找到所有圖像,並追加額外的url參數 – Bob 2009-11-26 19:38:14

+0

是的,我知道我可以這樣做,但這不是一個好習慣......首先所有,認爲我將不得不這樣做,所有頁面上的圖像(因爲不僅主頁有圖像,但用戶控件也有內部圖像);其次,爲了實現這個過程的自動化(當我在頁面上添加另一個圖像控件時,不必調整代碼),我將不得不遍歷頁面控件並僅查找圖像控件,並修改imageurl屬性。 。這是非常耗時的,特別是如果該控件的命中數很高,從而導致性能下降。 – GeoXYZ 2009-11-26 22:56:36