httpcompression enable compresion .net json iis-7 http-compression

.net - enable - iis gzip compression web config



Configurando IIS 7.5 para enviar respuestas JSON comprimidas, NO_MATCHING_CONTENT_TYPE (1)

Así que estoy tratando de que mi aplicación envíe sus respuestas JSON usando compresión dinámica y gzip. Desafortunadamente esto no está funcionando. Toda la compresión estática en el servidor funciona bien, pero no es dinámica.

He configurado esto agregando:

<add mimeType="application/json" enabled="true" /> <add mimeType="application/json; charset=utf-8" enabled="true" />

A la sección <dynamicTypes> de <httpCompression> en el archivo applicationHost.config. Estoy usando Charles para inspeccionar solicitudes HTTP y puedo verificar que estoy enviando las solicitudes con Accept-Encoding: gzip, deflate header set. He intentado con Accept: */* y Accept: application/json . Cuando no funcionaba, habilité el registro de seguimiento de ''Solicitud fallida'' para encontrar el código de error para DYNAMIC_COMPRESSION_NOT_SUCCESS , que era NO_MATCHING_CONTENT_TYPE .

He estado tratando de investigar en foros y en Google, pero todo lo que puedo ver es gente que dice que usar mimeType con el conjunto de caracteres especificado soluciona el problema para ellos, pero en mi caso aún no funciona y puedo verificar que la respuesta llegue de vuelta con un encabezado diciendo Content-Type: application/json; charset=utf-8 Content-Type: application/json; charset=utf-8

Los puntos finales que sirven a las respuestas JSON son servicios web ASMX .NET estándar anotados con [ScriptService()] en la clase y [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] en el método. Devuelven JSON bien, pero no puedo conseguir que la compresión dinámica funcione durante toda mi vida.

Ya que estos son métodos web regulares también agregué:

<add mimeType="text/xml" enabled="true" /> <add mimeType="text/xml; charset=utf-8" enabled="true" />

Para intentar gzip las respuestas XML. Lo que es frustrante es que esta compresión funciona mientras que el envío de JSON desde el mismo método no lo hace. En este punto estoy un poco perdido.


Desea asegurarse de que el tipo */* mime esté después de los tipos que agregue. También asegúrese de haber instalado el Módulo de Compresión Dinámica usando el Administrador del Servidor (o OptionalFeatures.exe)

Estas son las líneas de comando que utilizo para asegurarme de que se realice una buena compresión. (pero asegúrese de que realmente haya instalado los módulos de Compresión Dinámica y Estática):

call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/serverRuntime /frequentHitThreshold:"1" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/urlCompression /doDynamicCompression:"True" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /-"dynamicTypes.[mimeType=''application/json'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType=''application/json'',enabled=''True'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /-"dynamicTypes.[mimeType=''application/json; charset=utf-8'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType=''application/json; charset=utf-8'',enabled=''True'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /-"dynamicTypes.[mimeType=''application/javascript'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType=''application/javascript'',enabled=''True'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /-"dynamicTypes.[mimeType=''application/x-javascript'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType=''application/x-javascript'',enabled=''True'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /-"dynamicTypes.[mimeType=''application/x-javascript; charset=utf-8'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType=''application/x-javascript; charset=utf-8'',enabled=''True'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /-"dynamicTypes.[mimeType=''*/*'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType=''*/*'',enabled=''False'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /-"staticTypes.[mimeType=''application/javascript'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /+"staticTypes.[mimeType=''application/javascript'',enabled=''True'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /-"staticTypes.[mimeType=''application/x-javascript'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /+"staticTypes.[mimeType=''application/x-javascript'',enabled=''True'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /-"staticTypes.[mimeType=''application/x-javascript; charset=utf-8'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /+"staticTypes.[mimeType=''application/x-javascript; charset=utf-8'',enabled=''True'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /-"staticTypes.[mimeType=''*/*'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /+"staticTypes.[mimeType=''*/*'',enabled=''False'']" call %windir%/system32/inetsrv/appcmd.exe set config -section:system.webServer/httpCompression /noCompressionForHttp10:"False" /noCompressionForProxies:"False" /minFileSizeForComp:"2700"

Después de ejecutar esto, su% windir% / system32 / inetsrv / config / ApplicationHost.config debería tener un aspecto similar (tenga en cuenta que / está en la parte inferior):

<httpCompression directory="%SystemDrive%/inetpub/temp/IIS Temporary Compressed Files" minFileSizeForComp="2700" noCompressionForHttp10="false" 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/json" enabled="true" /> <add mimeType="application/json; charset=utf-8" enabled="true" /> <add mimeType="application/javascript" enabled="true" /> <add mimeType="application/x-javascript" enabled="true" /> <add mimeType="application/x-javascript; charset=utf-8" enabled="true" /> <add mimeType="*/*" enabled="false" /> </dynamicTypes> <staticTypes> <add mimeType="text/*" enabled="true" /> <add mimeType="message/*" enabled="true" /> <add mimeType="application/atom+xml" enabled="true" /> <add mimeType="application/xaml+xml" enabled="true" /> <add mimeType="application/javascript" enabled="true" /> <add mimeType="application/x-javascript" enabled="true" /> <add mimeType="application/x-javascript; charset=utf-8" enabled="true" /> <add mimeType="*/*" enabled="false" /> </staticTypes> </httpCompression>