20

번들 요청에서 보낸 캐시 헤더를 변경하려고합니다. 현재는 User-Agent에 따라 다르지만 번들 요청으로 보낸 헤더를 변경하는 방법이 있습니까?MVC4 번들 캐쉬 헤더

System.Web.Optimization 조립품을 간략하게 살펴본 후에 헤더가 Bundle.SetHeaders에 설정된 것을 볼 수 있습니다. 이는 개인 정적 기능이므로 잘못된 것으로 입증되기를 바랍니다.

+4

나는이 머리글을 처음 추가 할 때 논리에 관심이있는 사람이라면 누구에게나 관심이 있습니다. 번들 코드 자체는 사용자 에이전트에 따라 다르게 동작합니까? 아니면 예방 조치일까요? – Jamie

+0

우리가 이것을하는 이유에 관해서는, IE의 캐시가 페이지 인스펙터에 대한 요청을 엉망으로 만들거나 VS 외부의 IE에 페이지 인스펙터 번들을 제공하는 것을 막기 위해 IE를 사용하여 커스텀 사용자 에이전트를 보내는 VS Page Inspector 기능에 필요합니다 . –

+0

@HaoKung 나는 같은 문제가있다. 캐시 컨트롤 헤더 값을'private' 대신'public, max-age = 31536000'으로 설정하고 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

이슈 트래커 URL : https://aspnetoptimization.codeplex.com/workitem/136과 혼란을 겪습니다. 가능한 해결 방법에 대해서도 언급합니다. – janv8000

0

janv8000's comment on this response에서 설명한대로 해결 방법이 있습니다. 당신은 당신의 웹 서버에 다음 URL 재 작성 규칙을 추가해야합니다

<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 전제 조건을 변경해야합니다.