Cómo puedo comprimir un resultado Json desde ASP.NET MVC con IIS 7.5


Estoy teniendo dificultades para hacer que IIS 7 comprima correctamente un resultado Json de ASP.NET MVC. He habilitado la compresión estática y dinámica en IIS. Puedo verificar con Fiddler que el texto normal/html y registros similares están comprimidos. Al ver la solicitud, el encabezado accept-encoding gzip está presente. La respuesta tiene el tipo mime "application / json", pero no está comprimida.

He identificado que el problema parece estar relacionado con el tipo Mime. Cuando incluyo mimeType="*/*", puedo ver que la respuesta es correctamente gzipped. ¿Cómo puedo hacer que IIS se comprima SIN usar un tipo mime comodín? Supongo que este tema tiene algo que ver con la forma en que ASP.NET MVC genera encabezados de tipo de contenido.

El uso de CPU está muy por debajo del umbral de limitación dinámica. Cuando examino los registros de seguimiento de IIS, puedo ver que no se comprime debido a no encontrar un tipo mime coincidente.

<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>
Author: abatishchev, 2010-01-26

4 answers

Asegúrese de que su %WinDir%\System32\inetsrv\config\applicationHost.config contiene estos:

<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>

Desde el enlace de @AtanasKorchev.

Como @simon_weaver dijo en los comentarios, es posible que esté editando el archivo incorrecto con un editor de 32 bits en un Windows de 64 bits, use el bloc de notas.exe para asegurarse de que este archivo está realmente modificado.

 59
Author: deerchao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-26 16:26:52

He utilizado con éxito el enfoque resaltado aquí.

 22
Author: Atanas Korchev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-26 08:52:24

Utilice esta guía

Ninguna de estas respuestas funcionó para mí. Tomé nota de la aplicación /json; charset=utf-8 de tipo mime.

 14
Author: Ryan Kirkman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-10 12:21:40

Recomiendo este enfoque
Cree la clase CompressAttribute y establezca la acción de destino.

 5
Author: takepara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-10 12:22:52