2016-07-03 389 views
1

내 사이트는 정적 사이트이며 IIS 8 웹 서버의 콘텐츠를 제공합니다. 아파치를 사용하는 데 사용하고 난 캐시 내가 IIS에서 구현하고 싶은, 파열에 대한 다음과 같은 구성이 : 나는 환경 변수 "공학적으로 설계된"이 설정되어 있는지 여부에 따라 캐시 제어를 설정 한 후정적 콘텐츠에 대한 쿼리 문자열을 사용하여 IIS에서 캐시 무효화

# Extend cache expiry for fingerprinted URLs 
RewriteCond  %{QUERY_STRING} ^[0-9a-fA-F]{8,}$ 
RewriteRule ^ - [E=revved:1] 

을 그리고를 :

# (For HTTP/1.1 clients) 
Header set Cache-Control "max-age=1200" env=!revved 
Header set Cache-Control "max-age=31536000" env=revved 

My JS와 CSS가 번들되어 있으며 쿼리 문자열에 해시를 첨부합니다. 나는 이미지에 대해서도 똑같이한다.

지금까지 내가 할 수 있었던 일은 <clientCache /> 요소를 사용하고 cacheControlMode="UseMaxAgecacheControlMaxAge="00:20:00"을 첨부하는 것입니다.

아파치 설정에서 볼 수있는 것은 "revved"변수를 설정하면 프록시 서버 (CDN)와 클라이언트가 365 일 동안 파일을 캐시해야한다는 것입니다. 그렇지 않으면 20 분 동안 캐시되어야합니다. 내 web.config에서 동일한 동작을하고 싶습니다.

IIS의 "출력 캐싱"에 대해서는 읽었지만 PHP 또는 ASP를 사용하는 동적 페이지를 위해 설계된 것으로 알고 있습니다.

누군가가 나를 올바른 방향으로 인도 할 수 있다면 매우 감사 할 것입니다.

답변

0

나는 작동하는 해결책을 찾았다 고 생각합니다. MSDN "Change or modify a Response Header value using URL Rewrite"에서이 게시물의 힌트를 얻었습니다.

<outboundRules> 
    <rule name="ChangeCacheControlHeaderOneYear"> 
    <match serverVariable="RESPONSE_CacheControl" /> 
    <conditions> 
     <add input="{QUERY_STRING}" pattern="^[0-9a-fA-F]{8,}$" /> 
    </conditions> 
    <action type="Rewrite" value="max-age=31536000" /> 
    </rule> 
    <rule name="ChangeCacheControlHeader20Minutes"> 
    <match serverVariable="RESPONSE_CacheControl" /> 
    <conditions> 
    <add input="{QUERY_STRING}" pattern="^[0-9a-fA-F]{8,}$" negate="true" /> 
    </conditions> 
    <action type="Rewrite" value="max-age=1200" /> 
    </rule> 
</outboundRules> 
관련 문제