programing

IIS7 캐시 제어

stoneblock 2023. 4. 29. 08:16

IIS7 캐시 제어

저는 제가 생각하기에 꽤 간단한 것을 하려고 노력하고 있습니다.IIS 7에서 클라이언트에게 특정 시간(예: 24시간) 동안 내 사이트의 모든 이미지를 캐시할 수 있다고 말합니다.

저는 http://www.galcho.com/Blog/post/2008/02/27/IIS7-How-to-set-cache-control-for-static-content.aspx 의 단계를 시도해 보았지만 소용이 없었습니다.304개가 반송되는 서버로 요청이 아직도 오고 있습니다.

누구 이런 방법 있는 사람 있어요?그래픽을 많이 사용하는 사이트가 있고 사용자가 페이지를 요청할 때마다 서버도 마찬가지로 타격을 받고 있습니다.이상하게도 이미지는 Firebug에 "Cache-Control private, max-age=3600"이 표시되는 것처럼 보이지만 F5를 누르면 브라우저에서 여전히 요청 중입니다.

캐시 제어 헤더를 설정하려면 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.exeset config "기본 웹 사이트/폴더"-section:system.webServer/staticContent-clientCache.cacheControlMode:최대 사용 기간
\Windows\system32\inetsrv\appcmd.exeset config "기본 웹 사이트/폴더"-section:system.webServer/staticContent-clientCache.cacheControlMaxAge:"7.00:00"

그건 사실이 아니에요, 제프.

IIS 7 Manager UI 내의 폴더(예: 기본 웹 응용 프로그램 폴더 또는 이미지)를 선택한 후 "HTTP 응답 헤더"를 클릭하면 됩니다.그런 다음 "공통 헤더 설정..."을 클릭해야 합니다.오른쪽 창에서 "웹 콘텐츠 만료"를 선택합니다.여기서 "이후:"를 선택하고 텍스트 상자에 "24"를 입력한 다음 콤보 상자에서 "시간"을 선택하여 최대 24시간을 쉽게 구성할 수 있습니다.

web.config 항목에 대한 당신의 첫 번째 단락이 맞습니다.cacheControlCustom-attribute를 추가하여 캐시 제어 헤더를 "public"(공용)으로 설정하거나 이 경우 필요한 모든 것을 설정합니다.

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

편집: 혼란스러운 문장을 삭제했습니다 :)

사용합니다.

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

공용 캐시 제어 헤더를 사용하여 500일 동안 정적 콘텐츠를 캐시합니다.

엘머의 답변을 보완하기 위해, 내 편집이 롤백되었습니다.

공용 캐시 제어 헤더를 사용하여 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>

F5 Refresh는 "현재 HTML과 그 직접적인 종속성을 다시 로드하십시오"라는 의미를 가집니다.따라서 HTML에 의해 직접 참조되는 모든 imgs, css 및 js 리소스도 다시 페치될 것으로 예상해야 합니다.물론 이에 대한 304의 응답은 허용되지만 F5 새로 고침은 브라우저가 새로운 캐시 콘텐츠에 의존하지 않고 요청을 수행한다는 것을 의미합니다.

대신 다른 곳을 탐색한 다음 다시 탐색해 보십시오.

대부분의 브라우저에서 f5를 누른 상태에서 ctrl 키를 누른 상태에서 304를 지난 상태에서 강제로 새로 고칠 수 있습니다.

쉬운 방법이 있습니다. 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>

언급URL : https://stackoverflow.com/questions/642954/iis7-cache-control