我想更改從捆綁包請求發送的高速緩存頭。目前它是由User-Agent
變化,但我不希望它,有沒有辦法改變包請求發送的頭?MVC4捆綁高速緩存頭
快速查看System.Web.Optimization
程序集後,我可以看到頭文件被設置在Bundle.SetHeaders
這是一個私有靜態函數,所以我不認爲它是可能的,儘管我希望被證明是錯誤的。
我想更改從捆綁包請求發送的高速緩存頭。目前它是由User-Agent
變化,但我不希望它,有沒有辦法改變包請求發送的頭?MVC4捆綁高速緩存頭
快速查看System.Web.Optimization
程序集後,我可以看到頭文件被設置在Bundle.SetHeaders
這是一個私有靜態函數,所以我不認爲它是可能的,儘管我希望被證明是錯誤的。
這不是我們目前公開的東西。我們只公開IBundleTransform可能改變的BundleRepsonse上的Cacheability屬性。是的,我們明確地設置了以下幾件事:
HttpCachePolicyBase cachePolicy = context.HttpContext.Response.Cache;
cachePolicy.SetCacheability(bundleResponse.Cacheability);
cachePolicy.SetOmitVaryStar(true);
cachePolicy.SetExpires(DateTime.Now.AddYears(1));
cachePolicy.SetValidUntilExpires(true);
cachePolicy.SetLastModified(DateTime.Now);
cachePolicy.VaryByHeaders["User-Agent"] = true;
我們有一個工作項目我們積壓打開此起來,使這個更具擴展性/可定製的未來。
是否有任何跡象表明此次更改的時間表,此頭文件的影響對CDN整合造成嚴重影響 –
問題跟蹤器網址:https://aspnetoptimization.codeplex.com/workitem/136。還提到了一種可能的解決方法。 – janv8000
在janv8000's comment on this response中提到了解決方法。您需要將以下URL重寫規則添加到您的Web服務器:
<system.webServer>
<rewrite>
<outboundRules>
<rule name="Cache Bundles" preCondition="IsBundles" patternSyntax="ExactMatch">
<match serverVariable="RESPONSE_Vary" pattern="User-Agent" />
<action type="Rewrite" value="Accept-Encoding" />
</rule>
<preConditions>
<preCondition name="IsBundles" patternSyntax="Wildcard">
<add input="{URL}" pattern="*/bundles/*" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
</system.webServer>
顯然,你需要注意把所有的包在包文件夾或相應地改變IsBundles
前提。
我也會對來自任何人的任何想法感興趣,這些想法是首先添加此標頭的邏輯 - 例如根據用戶代理,捆綁代碼本身的行爲會有所不同嗎?還是僅僅是一種預防措施? – Jamie
關於爲什麼我們這樣做,它需要VS頁面檢查器功能,它使用IE發送一個自定義用戶代理,以防止IE的緩存弄亂對頁面檢查器的請求,或將頁面檢查器捆綁到IE之外的VS 。 –
@HaoKung我有同樣的問題,我希望能夠設置緩存控制標題值爲'public,max-age = 31536000'而不是'private',並且還要添加一個Etag標頭。它看起來像這兩個目前不可能? –