2017-08-08 45 views
1

所以我有一個ASP.NET MVC 5個網站,本地在我的Windows 10筆記本電腦在IIS上運行10與web.config中的以下設置。ASP.NET MVC + IIS 10 - 緩存控制始終私人

在發佈配置編譯,調試模式關閉:

<compilation debug="false" targetFramework="4.5.2" /> 

,並使用max-age的一個Cache-Control頭:

<staticContent> 
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" /> 
</staticContent> 

但無論我做什麼,我總是看到的cache控制:私人

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 

我已關閉所有模塊,並運行失敗的跟蹤請求,它顯示標題進行設置:

enter image description here

但我不能追查這個ManagedPipelineHandler什麼這似乎是在頭設置的模塊。

我嘗試添加的Cache-Control作爲自定義標題:

<httpProtocol> 
    <customHeaders> 
    <remove name="X-Powered-By" /> 
    <remove name="Cache-Control" /> 
    <add name="Cache-Control" value="public, max-age=1800, must-revalidate" /> 
    </customHeaders> 
</httpProtocol> 

但這只是附加到現有的私人設置:

HTTP/1.1 200 OK 
Cache-Control: private,public, max-age=1800, must-revalidate 
Content-Type: text/html; charset=utf-8 

runAllManagedModulesForAllRequests設置爲false,這其他職位有建議的原因可能。

我知道我可以在代碼中設置這個頭,但我很想知道是什麼&爲什麼迫使「私人」的設置。

任何人都可以建議嗎?

UPDATE

Something is forcing responses to have cache-control: private in IIS7

所以這是.NET的默認行爲時,有用於請求沒有輸出緩存(並啓用了輸出緩存)。如果您的sendCacheControlHeader屬性設置爲false在web.config中& - 你沒有得到緩存控制:私人頭!

奇怪的是你還沒有根據的節點上得到正確的Cache-Control頭 - 但你控制通過節頭,所以這個現在工作:

在這種情況下
<httpProtocol> 
    <customHeaders> 
    <remove name="X-Powered-By" /> 
    <add name="Cache-Control" value="max-age=30,public" /> 
    </customHeaders> 
</httpProtocol> 

回答

0

緩存被控制通過.NET和MVC應用程序,這是什麼在推動「私有」的價值。爲了控制這個值,你通常會用適當的緩存行爲裝飾控制器或動作:

  • [OutputCache(...)]>具體地控制輸出的高速緩存控制,如秒的持續時間,由編碼參數,頭部或其他值,位置或其他配置選項

如果沒有高速緩存值被設置時,「私人」值方差是MVC使用的默認值。如果您想要全局應用緩存設置,則可以在應用程序初始化期間創建一個篩選器並將其應用於全局篩選器。

+0

您是否在說「默認」MVC設置會覆蓋完全合法的system.webserver設置?這似乎不正確。 – Neil