压缩jQuery的Web服务响应

时间:2011-01-03 13:48:52

标签: web-services iis-7 compression asmx gzip

我试图通过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"/>

通过提琴手,我可以看到正常的aspx和其他按压效果很好。但是,jQuery ajax请求和响应应该正常工作,只有任何东西都不会被压缩。

我错过了什么?

5 个答案:

答案 0 :(得分:13)

您只能在 applicationHost.config 中更改 httpCompression 。 见this link

和你一样,我尝试先在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>

答案 1 :(得分: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中重新打开后也是如此。

答案 2 :(得分: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>

答案 3 :(得分:5)

由于web.config中的以下行,applicationHost.config中的更改无法正常工作:

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

如果您将其替换为:

<section name="httpCompression" overrideModeDefault="Allow" />

可以在本地进行更改。

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

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

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

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

答案 4 :(得分:0)

http://forums.iis.net/t/1160210.aspx?missing+applicationhost+config

  

配置文件应该是%windir%\ system32 \ inetsrv \ config \ applicationhost.config。

     

(请注意,如果您的应用程序(正在搜索applicationhost.config)是32位应用程序(例如,如果您使用32位CMD.EXE),那么您将无法由于Windows SYSWOW32重定向而看到配置文件)

关于缺少applicationhost.config的一些解释,将 overrideModeDefault 属性更改为允许。它是由SYSWOW32重定向引起的。

在您

之前,您可能也看不到配置文件
  1. 通过在文件资源管理器位置栏中完全粘贴&#34;%windir%\ system32 \ inetsrv \ config \&#34; 打开文件夹,然后< strong>不您的文字编辑器
  2. 右键单击并直接在该文件夹中编辑文件。
  3. 这是因为某些64位编辑器仍然以某种方式使用错误的文件选择器对话框。

相关问题