我试图通过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请求和响应应该正常工作,只有任何东西都不会被压缩。
我错过了什么?
答案 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重定向引起的。
在您
之前,您可能也看不到配置文件这是因为某些64位编辑器仍然以某种方式使用错误的文件选择器对话框。