programing

ASP에서 Json 결과를 압축하려면 어떻게 해야 합니까?IIS 7.5를 사용하는 NET MVC

linuxpc 2023. 3. 2. 22:03
반응형

ASP에서 Json 결과를 압축하려면 어떻게 해야 합니까?IIS 7.5를 사용하는 NET MVC

ASP의 Json 결과를 IIS 7에서 올바르게 압축하는 데 문제가 있습니다.NET MVC. IIS에서 정적 및 동적 압축을 활성화했습니다.일반 텍스트/html 및 유사한 레코드가 압축되어 있는지 Fiddler로 확인할 수 있습니다.요청을 표시하면 accept-encoding gzip 헤더가 있습니다.응답의 mimtype은 "application/json"이지만 압축되지 않았습니다.

문제가 MimeType과 관련된 것으로 보입니다.포함할 때mimeType="*/*", 응답이 올바르게 압축되어 있는 것을 알 수 있습니다.와일드카드 mimeType을 사용하지 않고 IIS를 압축하려면 어떻게 해야 합니까?저는 이 문제가 ASP의 방식과 관련이 있다고 생각합니다.NET MVC는 콘텐츠유형 헤더를 생성합니다.

CPU 사용량이 동적 슬롯링 임계값을 훨씬 밑돌고 있습니다.IIS에서 트레이스 로그를 조사하면 일치하는 MIME 유형을 찾지 못해 압축에 실패했음을 알 수 있습니다.

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" noCompressionForProxies="false">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
    <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/json" enabled="true" />
    </dynamicTypes>
    <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/xaml+xml" enabled="true" />
        <add mimeType="application/json" enabled="true" />
    </staticTypes>
</httpCompression>

%WinDir%\를 확인합니다.System32\inetsrv\config\applicationHost.config에는 다음이 포함됩니다.

<system.webServer>
    <urlCompression doDynamicCompression="true" />
    <httpCompression>
      <dynamicTypes>
        <add mimeType="application/json" enabled="true" />
        <add mimeType="application/json; charset=utf-8" enabled="true" />       
      </dynamicTypes>
    </httpCompression>
</system.webServer>

@AtanasKorchev 링크에서.

@simon_weaver가 코멘트에서 말한 것처럼 64비트 Windows에서 32비트 에디터로 잘못된 파일을 편집하고 있을 수 있습니다.메모장을 사용합니다.exe를 클릭하여 이 파일이 실제로 수정되었는지 확인합니다.

나는 여기서 강조된 접근법을 성공적으로 사용했다.

이 가이드를 사용하다

나는 이 대답들 중 어느 것도 통하지 않았다.어플리케이션/json; charset=utf-8 mime-type에 주목했습니다.

방법을 추천합니다.
만들다CompressAttributeclass 및 target 액션을 설정합니다.

ASP에 대해 ActionFilterAttribute 접근법이 업데이트되었습니다.NET 4.x 및 Brotli 포함.NET 패키지

using System;
using System.IO.Compression;
using Brotli;
using System.Web;
using System.Web.Mvc;


public class CompressFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpRequestBase request = filterContext.HttpContext.Request;

        string acceptEncoding = request.Headers["Accept-Encoding"];
        if (string.IsNullOrEmpty(acceptEncoding)) return;

        acceptEncoding = acceptEncoding.ToUpperInvariant();
        HttpResponseBase response = filterContext.HttpContext.Response;

        if (acceptEncoding.Contains("BR"))
        {
            response.AppendHeader("Content-encoding", "br");
            response.Filter = new BrotliStream(response.Filter, CompressionMode.Compress);
        }
        else if (acceptEncoding.Contains("GZIP"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
        else if (acceptEncoding.Contains("DEFLATE"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
    }
}

언급URL : https://stackoverflow.com/questions/2138243/how-do-i-compress-a-json-result-from-asp-net-mvc-with-iis-7-5

반응형