Web services 压缩jQuery的web服务响应

Web services 压缩jQuery的web服务响应,web-services,iis-7,compression,asmx,gzip,Web Services,Iis 7,Compression,Asmx,Gzip,我正试图从ASMXWeb服务中gzip一个JSON响应,以供jQuery在客户端使用 我的web.config已经有了这样的httpCompression集:我正在使用IIS 7 <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" staticCompressionDisableCpuUsage="90" staticCompressionEnableCpuU

我正试图从ASMXWeb服务中gzip一个JSON响应,以供jQuery在客户端使用

我的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"/>
通过fiddler,我可以看到正常的aspx和其他压缩工作正常。然而,jQueryAjax请求和响应工作正常,没有任何内容得到压缩

我缺少什么?

您只能在applicationHost.config中更改httpCompression。 看

和你一样,我尝试先在web.config中更改它,但没有成功。仅当我将以下行添加到C:\Windows\System32\inetsrv\config\applicationHost.config时,它才起作用:

... ...
Eric p的答案基本上是正确的。。。您需要精确匹配IIS在其HTTP响应头中发送的内容类型头。出于某种原因,我们的IIS7服务器响应为: 内容类型: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>
请使用记事本编辑applicationHost.config。我已经浪费了几个小时才明白我在记事本++和VisualStudio2010编辑器中所做的更改!!IIS不应用

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

再说一次:在做了这些更改之后,您只能在记事本中看到它们。记事本++以及VisualStudio2010编辑器!!为applicationHost.config维护某种形式的备用现实/存储。它向您显示了他自己的文件版本,该版本与您在记事本中看到的文件不同,即使该文件在记事本中编辑并在np++/VS中重新打开。

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

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

配置文件应为%windir%\system32\inetsrv\config\applicationhost.config

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

关于将overrideModeDefault属性更改为Allow所缺少的applicationhost.config的一些说明。这是由于SYSWOW32重定向造成的

此外,您可能无法看到配置文件,直到您

通过将%windir%\system32\inetsrv\config\粘贴到文件资源管理器位置栏中,而不是文本编辑器中,打开文件夹 右键单击并直接在该文件夹中编辑文件。
这是因为出于某种原因,某些64位编辑器仍然以某种方式使用错误的文件选择器对话框。

您需要使用64位编辑器在64位系统上编辑ApplicationHost.config。VS和大多数商业编辑器倾向于32位。奇怪的是,我的经验是,当试图用32位编辑器编辑applicationhost.config时,它甚至无法打开-我得到一个空白页。我猜这很可能与文件的安全权限有关。记事本++将允许您编辑您无权访问的文件,并将保留更改打开重新启动,但实际上不会将其保存到原始文件,除非您显式单击“保存”按钮并请求您提供管理权限。我正在尝试从web.config使其工作:applicationhost.config已更改,我将整个httpCompression部分移到了web.config,但它仍然不起作用。是否需要位置?我提出了关于这一点的附加问题。如果你能帮忙,我将不胜感激。不,不需要位置,它只是将httpCompression的效果限制在单个服务上的一种方法。对于您的问题,您应该检查整个配置文件层次结构。如果从applicationHost中删除了该节,则可能是从父目录的machine.config或web.config继承的。@Mart如何使用Appcmd.exe对applicationHost.config进行更改?我喜欢在web.config中管理它的想法。@Jonesome在IIS8+中看不到标题控制配置的位置。找不到任何官方文档说明为什么不能,但看起来您只能在applicationHost.config中定义httpCompression元素,而不是其他任何地方,无论您对配置部分进行了什么设置,请查看下面:-我无法通过记事本++编辑applicationHost.config。此链接建议使用一个对我有效的控制台命令。@MaximEliseev:您可能需要使用Fiddl之类的工具 查看服务器发送的实际内容类型响应头。我不知道它是否区分大小写,但粘贴您从Fiddler捕获的内容并没有什么坏处——包括额外的空格,可能还有编码为&9;的选项卡;。
<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
<section name="httpCompression" overrideModeDefault="Allow" />
<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>