我在 IIS7 中启用了压缩,它在所有响应上都按预期工作,除了那些由 ASP.NET AJAX 构建的响应。我有一个向客户端提供数据的 Web 服务。直接调用 Web 服务时,它被正确压缩。但是,当它通过 ASP.NET AJAX 调用时,JSON 响应不会被压缩。
如何让 ASP.NET AJAX 使用 GZip 压缩发送其 JSON 响应?
IIS7 使用 content-encoding 来决定是否压缩响应(当然假设浏览器可以接受 gzip)。它们在 applicationHost.config 中设置,默认情况下列表为
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
如果您直接调用 Web 服务,则 XML 响应的内容类型为text/xml
,它会被压缩。当被 AJAX 调用时,JSON 响应的内容类型为application/json
,因此它没有被压缩。将以下内容添加到 applicationHost.config 应该可以解决该问题...
<add mimeType="application/json" enabled="true" />
你使用的是什么浏览器?IE 6 中有一个错误会导致压缩错误。所以 ASP.NET AJAX 关闭了对 IE 6 浏览器的压缩:
http://weblogs.asp.net/scottgu/archive/2005/06/28/416185.aspx
另外,您是否启用了 ASMX 文件的压缩?
一般来说,您不想这样做,除非您不介意将数量级的服务器功率投入您的应用程序......
当你这样做时,不仅服务器CPU而且客户端CPU也会成为问题......
结论是,如果您对所有 Ajax 响应进行 GZip 压缩,您的应用程序会变得更慢......!
最后我检查了一下,gzipping 是 IIS 所做的(正确设置时)——当然,当浏览器发送所需的标头时