[asp.net] IIS7 캐시 제어

나는 꽤 간단하다고 생각했던 것을 시도하고있다. IIS 7을 사용하여 클라이언트에게 특정 시간 (예 : 24 시간) 동안 내 사이트의 모든 이미지를 캐시 할 수 있음을 알립니다.

http://www.galcho.com/Blog/post/2008/02/27/IIS7-How-to-set-cache-control-for-static-content.aspx 에서 단계를 시도 했지만 아무 소용이 없습니다. 나는 여전히 304s가 반환되는 서버로가는 요청을받습니다.

누구든지 이것을 할 방법이 있습니까? 나는 그래픽 집약적 인 사이트를 가지고 있으며 사용자가 페이지를 요청할 때마다 내 서버도 망치고 있습니다. 이상하게도 이미지에 “Cache-Control private, max-age = 3600″이 Firebug에 표시되는 것처럼 보이지만 F5를 누르면 브라우저가 여전히 이미지를 요청합니다.



답변

Cache-Control 헤더를 설정하려는 경우 슬프게도 IIS7 UI에는이를 수행 할 수있는 것이 없습니다.

그러나이 web.config를 설정하려는 폴더 또는 사이트의 루트에 놓을 수 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <staticContent>
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
    </staticContent>
  </system.webServer>
</configuration>

그러면 해당 폴더와 모든 하위 폴더에서 7 일 동안 콘텐츠를 캐시하도록 클라이언트에 알립니다.

다음과 같이을 통해 IIS7 메타베이스를 편집하여이 작업을 수행 할 수도 있습니다 appcmd.exe.

\ Windows \ system32 \ inetsrv \ appcmd.exe
  "기본 웹 사이트 / 폴더"구성 설정
  -section : system.webServer / staticContent
  -clientCache.cacheControlMode : UseMaxAge

\ Windows \ system32 \ inetsrv \ appcmd.exe
  "기본 웹 사이트 / 폴더"구성 설정
  -section : system.webServer / staticContent
  -clientCache.cacheControlMaxAge : "7.00 : 00 : 00"


답변

사실 Jeff가 아닙니다.

IIS 7 관리자 UI 내에서 폴더 (예 : 이미지 또는 이벤트 기본 웹 응용 프로그램 폴더)를 선택한 다음 “HTTP 응답 헤더”를 클릭하기 만하면됩니다. 그런 다음 오른쪽 창에서 “Set Common Header ..”를 클릭하고 “Expire Web content”를 선택해야합니다. “이후 :”를 선택하고 텍스트 상자에 “24”를 입력하고 콤보 상자에서 “시간”을 선택하여 24 시간의 최대 연령을 쉽게 구성 할 수 있습니다.

web.config 항목에 관한 첫 번째 단락이 맞습니다. cacheControlCustom-attribute를 추가하여 캐시 제어 헤더를 “public”으로 설정하거나이 경우에 필요한 모든 것을 설정합니다.

물론 필요에 따라 web.config 항목 (또는 파일)을 제공하여 동일한 작업을 수행 할 수 있습니다.

편집 : 혼란스러운 문장 제거 🙂


답변

나는 이것을 사용한다

<staticContent>
<clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="500.00:00:00" />
</staticContent>

공개 캐시 제어 헤더로 500 일 동안 정적 콘텐츠를 캐시합니다.


답변

F5 새로 고침은 “현재 HTML 그 직접 종속성을 다시로드하십시오”라는 의미를 갖습니다 . 따라서 HTML에서 직접 참조하는 imgs, css 및 js 리소스도 다시 가져 오는 것을 볼 수 있습니다. 물론 304는 이에 대한 허용 가능한 응답이지만 F5 새로 고침은 브라우저가 새로운 캐시 콘텐츠에 의존하지 않고 요청을 할 것임을 의미합니다.

대신 다른 곳으로 이동 한 다음 다시 탐색 해보십시오.

대부분의 브라우저에서 Ctrl 키를 누른 채 f5 키를 누르면 304를 지나서 강제로 새로 고침 할 수 있습니다.


답변

내 편집이 롤백되면서 Elmer의 답변을 보완합니다.

public cache-control header를 사용 하여 365 일 동안 정적 콘텐츠를 캐시하려면 IIS를 다음과 같이 구성 할 수 있습니다.

<staticContent>
    <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
</staticContent>

이것은 다음과 같은 헤더로 변환됩니다.

Cache-Control: public,max-age=31536000

max-age는 RFC 2616 섹션 14.9.3 및 14.9.4에 명시된대로 양의 32 비트 정수로 표현되는 델타 (초) 입니다. 이는 최대 값 2 ^ 31 또는 2,147,483,648 초 (68 년 이상)를 나타냅니다. 그러나 클라이언트와 서버 간의 호환성을 향상시키기 위해 권장되는 최대 365 일 (1 년)을 채택합니다.

다른 답변에서 언급했듯이 모든 정적 콘텐츠에 대해 사이트의 web.config에서도 이러한 지시문을 사용할 수 있습니다. 또는 특정 위치의 콘텐츠 에만 사용할 수도 있습니다 (샘플에서는 “cdn”폴더의 콘텐츠에 대해 30 일 공용 캐시).

<location path="cdn">
   <system.webServer>
        <staticContent>
             <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00"/>
        </staticContent>
   </system.webServer>
</location>


답변

쉬운 방법이 있습니다 : 1. 웹 사이트의 web.config 사용 2. “staticContent”섹션에서 특정 fileExtension 제거 및 mimeMap 추가 3. “clientCache”추가

<configuration>
  <system.webServer>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
    <staticContent>
      <remove fileExtension=".ipa" />
      <remove fileExtension=".apk" />
      <mimeMap fileExtension=".ipa" mimeType="application/iphone" />
      <mimeMap fileExtension=".apk" mimeType="application/vnd.android.package-archive" />
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="777.00:00:00" />
    </staticContent>
  </system.webServer>
</configuration>


답변