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) 通过fiddler,我可以看到正常的aspx和其他压缩工作正常。然而,jQueryAjax请求和响应工作正常,没有任何内容得到压缩 我缺少什么?您只能在applicationHost.config中更改httpCompression。 看 和你一样,我也试着先在web.config中更改它,但没有成功。只有在我

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

我的web.config已经有了如下的httpCompression集:(我正在使用IIS 7)


通过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。我已经浪费了好几个小时才明白我在记事本++(以及Visual Studio 2010 editor!!)中所做的更改不会被IIS应用

向dynamicTypes/staticTypes集合中添加其他mimeType的另一种方法是使用appcmd<代码>“C:\Windows\System32\Inetsrv\Appcmd.exe”设置配置-部分:system.webServer/httpCompression/+“动态类型。[mimeType='application/javascript',enabled='True']”/commit:apphost


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

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

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
关于
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,但它仍然不起作用。是否需要位置?我提出了关于这一点的附加问题。如果你能帮忙,我将不胜感激。不需要,
    location
    ,它只是将
    httpCompression
    的效果限制在单个服务上的一种方法。对于您的问题,您应该检查整个配置文件层次结构。如果您从
    applicationHost
    中删除了该节,则可能是从父目录的
    machine.config
    web.config
    继承的。@Mart如何使用Appcmd.exe更改applicationHost.config?我喜欢在web.config中管理它的想法。@Jonesome看到其中的标题“控制配置的位置”在IIS8+中不起作用。找不到任何官方文档来解释为什么不能,但看起来您只能在
    applicationHost.config
    中定义
    httpCompression
    元素,而其他任何地方都无法定义,无论您对config部分设置了什么,请查看下面:-我无法通过记事本++编辑applicationHost.config。此链接建议使用一个控制台命令,该命令对我有效。@MaximEliseev:您可能需要使用类似Fiddler的工具来查看服务器发送的实际内容类型响应标题。我不知道它是否区分大小写,但粘贴您从Fiddler捕获的内容并没有什么坏处——包括额外的空格,可能还有编码为 ;的制表符;。
    <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>