12

我在 IIS7 中启用了压缩,它在所有响应上都按预期工作,除了那些由 ASP.NET AJAX 构建的响应。我有一个向客户端提供数据的 Web 服务。直接调用 Web 服务时,它被正确压缩。但是,当它通过 ASP.NET AJAX 调用时,JSON 响应不会被压缩。

如何让 ASP.NET AJAX 使用 GZip 压缩发送其 JSON 响应?

4

4 回答 4

5

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" />
于 2008-11-05T21:23:26.233 回答
1

你使用的是什么浏览器?IE 6 中有一个错误会导致压缩错误。所以 ASP.NET AJAX 关闭了对 IE 6 浏览器的压缩:

http://weblogs.asp.net/scottgu/archive/2005/06/28/416185.aspx

另外,您是否启用了 ASMX 文件的压缩?

于 2008-10-30T00:59:57.380 回答
0

一般来说,您不想这样做,除非您不介意将数量级的服务器功率投入您的应用程序......

当你这样做时,不仅服务器CPU而且客户端CPU也会成为问题......

结论是,如果您对所有 Ajax 响应进行 GZip 压缩,您的应用程序会变得更慢......!

于 2008-11-20T08:50:27.893 回答
0

最后我检查了一下,gzipping 是 IIS 所做的(正确设置时)——当然,当浏览器发送所需的标头时

于 2008-11-05T04:19:06.847 回答