压缩jQuery的Web服务响应

Sir*_*mon 9 compression iis-7 gzip web-services asmx

我试图通过jQuery从客户端使用ASMX Web服务gzip JSON响应.

我的web.config已经像这样设置了httpCompression :(我正在使用IIS 7)

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" 
    staticCompressionDisableCpuUsage="90" staticCompressionEnableCpuUsage="60" 
    dynamicCompressionDisableCpuUsage="80" dynamicCompressionEnableCpuUsage="50">
    <dynamicTypes>
        <add mimeType="application/javascript" enabled="true"/>
        <add mimeType="application/x-javascript" enabled="true"/>
        <add mimeType="text/css" enabled="true"/>
        <add mimeType="video/x-flv" enabled="true"/>
        <add mimeType="application/x-shockwave-flash" enabled="true"/>
        <add mimeType="text/javascript" enabled="true"/>
        <add mimeType="text/*" enabled="true"/>
        <add mimeType="application/json; charset=utf-8" enabled="true"/>
    </dynamicTypes>
    <staticTypes>
        <add mimeType="application/javascript" enabled="true"/>
        <add mimeType="application/x-javascript" enabled="true"/>
        <add mimeType="text/css" enabled="true"/>
        <add mimeType="video/x-flv" enabled="true"/>
        <add mimeType="application/x-shockwave-flash" enabled="true"/>
        <add mimeType="text/javascript" enabled="true"/>
        <add mimeType="text/*" enabled="true"/>
    </staticTypes>
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
</httpCompression>
<urlCompression doDynamicCompression="true" doStaticCompression="true"/>
Run Code Online (Sandbox Code Playgroud)

通过提琴手我可以看到正常的aspx和其他按压工作正常.但是,jQuery ajax请求和响应应该工作,只有没有得到压缩.

我错过了什么?

Eri*_*c P 13

您只能在applicationHost.config中更改httpCompression.看到这个链接

像你一样,我试着先改变它web.config,但它没有用.它只在我添加以下行时才起作用C:\Windows\System32\inetsrv\config\applicationHost.config:

  <dynamicTypes>
       ...
       <add mimeType="application/json" enabled="true" />
       <add mimeType="application/json; charset=utf-8" enabled="true" />
       ...
  </dynamicTypes>
Run Code Online (Sandbox Code Playgroud)


Sas*_*sha 7

请使用NOTEPAD编辑applicationHost.config.我已经浪费了几个小时才明白我在notepad ++(以及Visual Studio 2010编辑器!!)中所做的更改不是由IIS应用的.

将其他mimeType添加到dynamicTypes/staticTypes集合的另一种方法是使用appcmd. "C:\Windows\System32\Inetsrv\Appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/javascript',enabled='True']" /commit:apphost

再说一遍:经过这些改变 - 你只会在记事本中看到它们.Notepad ++(以及Visual Studio 2010编辑器!!)为applicationHost.config维护某种f*ing备用现实/存储.它显示了他自己的文件版本(与你在记事本中看到的版本不同),即使在记事本中编辑文件并在np ++/VS中重新打开后也是如此.

  • 您需要使用64位编辑器在64位系统上编辑ApplicationHost.config.VS和大多数商业编辑都倾向于32位.奇怪的是,我的经验是在尝试使用32位编辑器编辑applicationhost.config时甚至无法打开 - 我得到一个空白页面. (6认同)

Alw*_*ing 5

Eric P的答案大多是正确的......您需要在其HTTP响应标头中完全匹配IIS发送的Content-Type标头.出于某种原因,我们的IIS7服务器响应:Content-Type:application/json; Q = 0.5

我之前从未在服务器响应中发现质量因素.多奇怪.

当我们将它添加到.config文件中的dynamicTypes时,一切都开始工作:

  <dynamicTypes>
       ...
       <add mimeType="application/json" enabled="true" />
       <add mimeType="application/json; q=0.5" enabled="true" />
       <add mimeType="application/json; charset=utf-8" enabled="true" />
       <add mimeType="application/json; q=0.5; charset=utf-8" enabled="true" />
       ...
  </dynamicTypes>
Run Code Online (Sandbox Code Playgroud)


Mar*_*art 5

web.config由于以下行中的更改不起作用applicationHost.config:

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
Run Code Online (Sandbox Code Playgroud)

如果您将其替换为:

<section name="httpCompression" overrideModeDefault="Allow" />
Run Code Online (Sandbox Code Playgroud)

这些变化可以在当地进行.

我认为这样更方便,因为您可以以不同方式配置每个服务,applicationHost.config如果必须添加新的MIME类型,则无需编辑.

以下是如何在web.config位于service子文件夹中的单个ASMX服务上激活压缩的示例:

<location path="service/MySpecificWebService.asmx">
    <system.webServer>
        <httpCompression>
            <dynamicTypes>
                <add mimeType="application/json" enabled="true" />
                <add mimeType="application/json; charset=utf-8" enabled="true" />
            </dynamicTypes>
        </httpCompression>
        <urlCompression doDynamicCompression="true" />
    </system.webServer>
</location>
Run Code Online (Sandbox Code Playgroud)

关于实际编辑applicationHost.config,我怀疑它不是文件系统中的真实文件.如果您在桌面上复制该文件,则可以使用任何文本编辑器对其进行编辑,然后将其复制回原始文件夹.