【发布时间】:2010-09-19 15:25:40
【问题描述】:
我在 IIS7 中启用了压缩,它在所有响应上都按预期工作,除了那些由 ASP.NET AJAX 构建的响应。我有一个向客户端提供数据的 Web 服务。直接调用 Web 服务时,它会被正确压缩。但是,通过 ASP.NET AJAX 调用时,JSON 响应不会被压缩。
如何让 ASP.NET AJAX 使用 GZip 压缩发送其 JSON 响应?
【问题讨论】:
我在 IIS7 中启用了压缩,它在所有响应上都按预期工作,除了那些由 ASP.NET AJAX 构建的响应。我有一个向客户端提供数据的 Web 服务。直接调用 Web 服务时,它会被正确压缩。但是,通过 ASP.NET AJAX 调用时,JSON 响应不会被压缩。
如何让 ASP.NET AJAX 使用 GZip 压缩发送其 JSON 响应?
【问题讨论】:
一般来说,您不希望这样做,除非您不介意将数量级的服务器功率投入您的应用程序...
当你这样做时,不仅服务器 CPU 和客户端 CPU 都会成为问题......
如果您对所有 Ajax 响应进行 GZip 压缩,您的应用会变得非常慢...!
【讨论】:
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" />
【讨论】:
最后我检查了一下,gzipping 是 IIS 所做的事情(当设置正确时)——当然当浏览器发送所需的标头时
【讨论】:
你用的是什么浏览器? IE 6 中有一个错误会导致压缩错误。所以 ASP.NET AJAX 关闭了对 IE 6 浏览器的压缩:
http://weblogs.asp.net/scottgu/archive/2005/06/28/416185.aspx
另外,您是否为 ASMX 文件启用了压缩功能?
【讨论】: