20

我想更改從捆綁包請求發送的高速緩存頭。目前它是由User-Agent變化,但我不希望它,有沒有辦法改變包請求發送的頭?MVC4捆綁高速緩存頭

快速查看System.Web.Optimization程序集後,我可以看到頭文件被設置在Bundle.SetHeaders這是一個私有靜態函數,所以我不認爲它是可能的,儘管我希望被證明是錯誤的。

+4

我也會對來自任何人的任何想法感興趣,這些想法是首先添加此標頭的邏輯 - 例如根據用戶代理,捆綁代碼本身的行爲會有所不同嗎?還是僅僅是一種預防措施? – Jamie

+0

關於爲什麼我們這樣做,它需要VS頁面檢查器功能,它使用IE發送一個自定義用戶代理,以防止IE的緩存弄亂對頁面檢查器的請求,或將頁面檢查器捆綁到IE之外的VS 。 –

+0

@HaoKung我有同樣的問題,我希望能夠設置緩存控制標題值爲'public,max-age = 31536000'而不是'private',並且還要添加一個Etag標頭。它看起來像這兩個目前不可能? –

回答

10

這不是我們目前公開的東西。我們只公開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; 

我們有一個工作項目我們積壓打開此起來,使這個更具擴展性/可定製的未來。

+3

是否有任何跡象表明此次更改的時間表,此頭文件的影響對CDN整合造成嚴重影響 –

+2

問題跟蹤器網址:https://aspnetoptimization.codeplex.com/workitem/136。還提到了一種可能的解決方法。 – janv8000

0

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前提。