[asp.net-mvc] IIS7에서 MVC3를 사용할 때 gzip 압축을 어떻게 활성화합니까?

아무도 MVC 3에서 gzip 압축을 활성화하는 방법을 알고 있습니까? IIS7을 사용하고 있습니다.

Google 크롬 감사 결과 :

  1. gzip 압축 활성화 (4)
  2. 다음 리소스를 gzip으로 압축하면 전송 크기를 약 2/3 (~ 92.23KB) 줄일 수 있습니다.
  3. / mydomain /은 ~ 1.53KB를 절약 할 수 있습니다.
  4. jquery-1.4.4.min.js는 ~ 51.35KB를 절약 할 수 있습니다.
  5. Cufon.js는 ~ 11.89KB를 절약 할 수 있습니다.
  6. Futura.js는 ~ 27.46KB를 절약 할 수 있습니다.


답변

web.config다음과 같이 파일을 통해 압축을 구성 할 수 있습니다 .

<system.webServer>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>

이 구성 요소에 대한 설명서는 iis.net/ConfigReference 에서 찾을 수 있습니다 . 이것은 다음과 동일합니다.

  1. 인터넷 정보 서비스 (IIS 관리자) 열기
  2. 수정하려는 가상 디렉터리에 도달 할 때까지 왼쪽의 트리보기를 탐색합니다.
  3. 오른쪽 창의 제목이 해당 가상 디렉터리의 이름이되도록 적절한 가상 디렉터리를 선택합니다.
  4. 오른쪽 창의 “IIS”에서 “압축”선택
  5. 두 옵션을 모두 선택하고 맨 오른쪽의 “작업”에서 “적용”을 선택합니다.

참고 : (주석에서 지적했듯이) Http Dynamic Compression이 설치되어 있는지 확인해야합니다. 그렇지 않으면 설정 doDynamicCompression="true"이 적용되지 않습니다. 이를 수행하는 가장 빠른 방법은 다음과 같습니다.

  1. 시작> 입력 optionalfeatures( “Windows 기능 켜기 또는 끄기”창으로 이동하는 가장 빠른 방법)
  2. “Windows 기능”트리보기에서 인터넷 정보 서비스> World Wide Web 서비스> 성능 기능으로 이동합니다.
  3. “동적 콘텐츠 압축”이 선택되어 있는지 확인합니다.
  4. “확인”을 클릭하고 Windows가 구성 요소를 설치하는 동안 기다립니다.

답변

그렇게한다면 코드에서 할 수 있습니다. 모든 컨트롤이 상속되는 basecontroller를 만들고 아래의이 속성으로 장식합니다.

public class CompressAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

        var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
        if (string.IsNullOrEmpty(encodingsAccepted)) return;

        encodingsAccepted = encodingsAccepted.ToLowerInvariant();
        var response = filterContext.HttpContext.Response;

        if (encodingsAccepted.Contains("deflate"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
        else if (encodingsAccepted.Contains("gzip"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
    }
}


답변

압축은 서버 수준에서 활성화 / 비활성화됩니다. iis 관리 콘솔의 IIS 압축 모듈을 참조하십시오.

다음은 Microsoft 사이트의 IIS 지침입니다 .


답변