2009-11-21 70 views
2

我有檢索存儲在數據庫中的圖像,並把它寫到響應一個HttpHandler(也做到了這一點作爲一個ASPX頁面)。我在代碼中添加了以下幾行代碼,試圖讓圖像在瀏覽器中緩存,但每當我查看Firebug中的響應時,它總是有一個緩存控制標頭值爲「private」。ASP.NET Cache.SetCacheability(HttpCacheability.Public)未設置頭

Response.Cache.SetCacheability(HttpCacheability.Public) 

我試過各種各樣的事情,就像使用Response.ClearHeaders & Response.AddHeader()來手動添加「緩存控制」頭值,但無濟於事。有任何想法嗎?

編輯:
更多信息:這是一個HTTP處理程序(ashx的)運行,並且我已經測試它都在我的本地IIS 5.1,並在託管網站我認爲這是IIS 6

回答

6

是否任何機會的頁面需要身份驗證設置該標誌?運行時將在需要認證的頁面上強制Cache-Control:private,以防止公共代理上的私人內容的意外緩存。

是否使用卡西尼?如果是這樣,它總是強制Cache-Control:private。如果是這樣,您可以嘗試切換到IIS。

+0

在我的託管站點上使用WinXP Pro上的IIS 5.1和IIS 6。 – patmortech 2009-11-21 15:17:49

+0

因此,您將Visual Studio配置爲在開發計算機上使用IIS,而不是使用內置的Web服務器?如果是這樣,IIS 5可能不支持這種方法;與Visual Studio集成的Web服務器肯定不會。 – RickNZ 2009-11-21 15:52:12

+0

正如我在我的評論中提到的,我在我的託管網站上嘗試了這個處理程序,它很可能在IIS 6上,並且獲得了相同的響應頭(Cache-Control:private)。 – patmortech 2009-11-21 16:00:42

0

你在哪裏設置此屬性?如果在輸出響應主體的第一行之後設置它,它將被忽略。對於頁面本身就意味着你必須最遲在PreRender

+0

這是的ProcessRequest()方法的過程中的HTTP處理程序,所以沒有什麼輸出在該點。我甚至在設置之前做一個Response.Clear()。 – patmortech 2009-11-21 15:05:20

1

剛剛發現這個響應,它幫助我了,但有一兩件事一個問題是防止緩存控制:公衆對我的設置:如果你使用多個Response.Cache.SetCacheability(),如:

cache.SetCacheability(HttpCacheability.ServerAndPrivate); 
... 
cache.SetCacheability(HttpCacheability.Public); 

電話,它是第一一個贏錢,所以之後SetCacheability()的調用不會覆蓋以前的設置。

1

不要在web.config中刪除認證要素。相反,將模式設置爲無。 如果沒有認證標籤,緩存控制將始終是「私人」,即使是調用setcacheability。