2011-04-10 1 views
16

IIS는 정적 콘텐츠 콘텐츠 압축 및 동적 콘텐츠 콘텐츠 압축의 두 가지 유형의 압축을 지원합니다. applicationHost.config에 따르면 DynamicCompressionModule (compdyn.dll)과 StaticCompressionModule (compstat.dll)의 다른 모듈에서 처리되며은 개의 다른 요청을 압축하도록 구성되어 있습니다. 또한 정적 압축 (기본적으로 압축 된 파일은 %SystemDrive%\inetpub\temp\IIS Temporary Compressed Files에 저장 됨)과 달리 동적 압축이 압축 된 요청을 캐시하지 않는다고 생각합니다.IIS7 : 정적 및 동적 콘텐츠 압축의 차이점

그러나 명백한 차이점 외에도 다른 점이 있다고 생각합니다. 저는 IIS 파이프 라인에 약간 다른 방식으로 연결되어 있다고 생각합니다. 아무도 더 자세한 내용을 내부에 넣을 수 있습니까?

내가 알아 낸 방법은 I was toying with a custom module for modifying CSS files on fly입니다. 정적 압축이 켜졌을 때 (그리고 텍스트/CSS와 같은 기본 파일 세트를 처리하도록 설정된 경우) 캐시 된 요청에 대해 내 맞춤 모듈이 이미 압축 된 콘텐츠를 제공 받았습니다. text/css를 동적으로 압축 된 요청 목록으로 이동하면 모든 작업이 시작되었습니다. 그러나 나는 그것을 실제로하는 올바른 방법이라는보다 견고한 증거를 갖고 싶습니다. 다른 알려진 결과/문제점이 있습니까?

업데이트 : 나는 왜 그런 일이 벌어지는 지에 대한 이론을 가지고 있다고 생각합니다. 그것은 100 % 정확하지 않을 수도 있지만 적어도 관찰 된 행동을 설명 할 수 있습니다. 나는 정적 압축 모듈 (일부 다른 사람의 사이에서) 다음 이벤트에 자신을 등록하는 생각 :

RQ_MAP_REQUEST_HANDLER 
RQ_EXECUTE_REQUEST_HANDLER 

그리고 정적 파일에 대한 요청이 제공 될 때, OnMapRequestHandler 검사에서 정적 압축 모듈은 파일이 압축되어 있는지 여부 이전에 그리고 실제 파일이 변경되지 않았는지 여부. 그렇다면 요청을 자신에게 다시 매핑합니다 (IMapHandlerProvider을 사용하여 적절한 리디렉션을 반환 함). 나중에 OnExecuteRequestHandler의 응답을 실제로 처리하면 압축 파일을 보냅니다. 반면에 파일이 이전에 압축되지 않았거나 변경된 경우 매핑 리디렉션을 수행하지 않고 정적 콘텐츠 모듈이 요청을 처리하도록하고 나중에 OnPostExecuteRequestHandler이 콘텐츠를 압축하고 캐시를 업데이트합니다. . 위에서 언급했듯이, 이것이 정확히 무슨 일이 일어나고 있는지 (소스 코드를 모른다는) 말은 아니며, 단지 근사치 일 수도 있습니다. 또한 동적 압축 모듈은이 중 하나를 수행하지 않습니다. RQ_EXECUTE_REQUEST_HANDLER 다음에 보내는 응답을 압축합니다.

답변

12

귀하의 질문은 명확하지 않으므로 질문에 답변하고 그것이 귀하의 질문이라고 희망합니다.

정적 압축의 목적은 하드 드라이브 (Css/images/javascript)에서 직접 제공되는 파일을 압축하는 것이므로 각 파일을 한 번 압축하고 압축 된 파일을 디스크에 저장합니다. 이렇게하면 자주 변경되지 않는 정적 파일에 대해 매우 빠르게 압축 된 컨텐츠를 제공 할 수 있습니다. 대부분의 웹 사이트에서 정적 압축을 사용하도록 설정하는 것이 좋습니다.

동적 압축의 목적은 ISS 모듈 (asp, asp.net, PHP 등)의 동적 응답을 압축하는 것입니다. 이 응답은 요청마다 다를 수 있으므로 압축 된 출력은 캐시 될 수 없습니다. 이 기능은 IIS6의 새로운 기능입니다. 일부 환경에서는 효과가있었습니다. ASP.Net에 HttpFilter를 구현하여. 각 요청을 즉석에서 압축해야하므로 CPU 집약적이며 정적 압축입니다. 따라서 서버가 CPU에 연결되어 있다면 이는 좋은 옵션이 아닐 수 있습니다.대부분의 사이트는 네트워크 및/또는 데이터베이스에 바인딩되므로 종종 좋은 생각입니다.

그래서 동적 및 정적은 내용을 참조하고 어떤 전략을 사용할 수 있는지 영향을줍니다. IIS 압축 기능을 사용하여 실험

일부 참조

0

, 동적 모듈과 정적 모듈이 때문에 (특히 동적 또는 정적 콘텐츠에 연결되지 않습니다 나에게 나타나 동적 모듈 용).

정적 모듈이 아닌 동적 모듈에서 text/html (또는 text/*) MIME 유형의 압축을 활성화하십시오. .html 파일에 액세스하십시오. 브라우저의 http 응답을 확인합니다. 압축되어 있습니다. (2008R2 서버의 IIS 7.5에서 테스트되었습니다.)

동적 압축 모듈은 동적 콘텐츠로 제한되지 않습니다. MIME 형식 목록과 일치하고 아직 압축되어 있지 않으면 압축 된 정적 내용을 제공합니다. 그래서 동적 인 "압축 모듈"로 이해해야한다고 생각합니다. 각 응답 (mime 형식 기준과 accept-encoding 요청 헤더 기반)에 따라 트리거된다는 의미입니다.

정적 압축 모듈은 파일에서 작동하는 백그라운드 프로세스처럼 약간 트리거되고 압축 된 출력은 캐시에 한 번만 제공되기 시작합니다. 정적 압축 모듈은 모듈 스택에서 farer를 실행하기 때문에 동적 압축 모듈보다 먼저 응답을 처리하므로 출력 압축을 제공하면 동적 압축 모듈보다 우선합니다.

사용자 지정 CSS 패치 모듈을 무효화하는 캐싱 문제를 피하려면 text/css MIME 형식의 고정 압축 모듈을 사용하지 않도록 설정해야합니다 (존재하는 경우 text\*도 제거하십시오).

이 경우 정적 압축 모듈을 대체하기 위해 동적 압축 모듈에서 text/css의 압축을 활성화 할 수도 있습니다. 물론 정적 압축 모듈 캐싱 기능을 활용하지 않습니다.

불행히도 위의 진술을 백업하는 데 필요한 설명서가 없습니다.

다른 옵션은 IIS 모듈 실행 순서를 변경하려고 할 수 있습니다. 귀하의 사이트 구성에서 모두 제거한 다음 다시 추가하고 사용자 정의 모듈을 정적 압축 이전에 삽입해야합니다. 그러나 이것은 까다로운 길일 수 있습니다.