Web services 压缩jQuery的web服务响应
我正试图从ASMXWeb服务中gzip一个JSON响应,以供jQuery在客户端使用 我的web.config已经有了如下的httpCompression集:(我正在使用IIS 7)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中更改它,但没有成功。只有在我
通过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重定向造成的
此外,您可能无法看到配置文件,直到您
这是因为出于某种原因,某些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>