我已经根据这个S/O答案添加了web.config条目来启用gzip压缩Enable IIS7 gzip。
然后,在加载ASPX页面时,我检查了Chrome开发人员窗口,并看到响应中的标头:
Cache-Control:private
Content-Encoding:gzip
Content-Length:3669
Content-Type:text/html; charset=utf-8
Date:Wed, 04 Mar 2015 00:46:05 GMT
Server:Microsoft-IIS/7.5
Vary:Accept-Encoding
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET
那就意味着它“运行”了,对吗?但是在进行 Web API 调用时寻找该标题时,它并不存在:
Cache-Control:no-cache
Content-Length:551
Content-Type:application/json; charset=utf-8
Date:Wed, 04 Mar 2015 00:53:05 GMT
Expires:-1
Pragma:no-cache
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET
我尝试了各种不同的配置(从上面链接的S/O回答中推荐的那个开始)。最后,在绝望的情况下,我将它设置为这样,我认为它会尝试压缩所有请求(除 */* 外的所有内容都被注释掉):
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
<dynamicTypes>
<add mimeType="*/*" enabled="true"/>
<!--<add mimeType="text/*" enabled="true"/>
<add mimeType="message/*" enabled="true"/>
<add mimeType="application/javascript" enabled="true"/>
<add mimeType="application/json" enabled="true"/>-->
<!--<add mimeType="*/*" enabled="false"/> -->
</dynamicTypes>
<staticTypes>
<add mimeType="*/*" enabled="true"/>
<!--<add mimeType="text/*" enabled="true"/>
<add mimeType="message/*" enabled="true"/>
<add mimeType="application/javascript" enabled="true"/>
<add mimeType="application/json" enabled="true"/>-->
<!-- add mimeType="*/*" enabled="false"/>-->
</staticTypes>
</httpCompression>
<urlCompression doStaticCompression="true" doDynamicCompression="true"/>
我的Web API方法为什么无法应用GZIP压缩?
更新
我已经尝试了NuGet Web API Compression package以及在IIS Express 8.0(Visual Studio)和本地安装的IIS 7.5中编辑applicationHost.config。但所有这些都产生了相同的结果:对于类似text/*的其他mime类型的请求可以正常工作,但application/json则无法进行gzip压缩。