Sir*_*mon 9 compression iis-7 gzip web-services asmx
我试图通过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"/>
Run Code Online (Sandbox Code Playgroud)
通过提琴手我可以看到正常的aspx和其他按压工作正常.但是,jQuery ajax请求和响应应该工作,只有没有得到压缩.
我错过了什么?
Eri*_*c P 13
您只能在applicationHost.config中更改httpCompression.看到这个链接
像你一样,我试着先改变它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>
Run Code Online (Sandbox Code Playgroud)
请使用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中重新打开后也是如此.
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>
Run Code Online (Sandbox Code Playgroud)
web.config由于以下行中的更改不起作用applicationHost.config:
<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
Run Code Online (Sandbox Code Playgroud)
如果您将其替换为:
<section name="httpCompression" overrideModeDefault="Allow" />
Run Code Online (Sandbox Code Playgroud)
这些变化可以在当地进行.
我认为这样更方便,因为您可以以不同方式配置每个服务,applicationHost.config如果必须添加新的MIME类型,则无需编辑.
以下是如何在web.config位于service子文件夹中的单个ASMX服务上激活压缩的示例:
<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>
Run Code Online (Sandbox Code Playgroud)
关于实际编辑applicationHost.config,我怀疑它不是文件系统中的真实文件.如果您在桌面上复制该文件,则可以使用任何文本编辑器对其进行编辑,然后将其复制回原始文件夹.