所以我有一個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
我已關閉所有模塊,並運行失敗的跟蹤請求,它顯示標題進行設置:
但我不能追查這個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>
您是否在說「默認」MVC設置會覆蓋完全合法的system.webserver設置?這似乎不正確。 – Neil