【问题标题】:How can I get ASP.NET AJAX to send its JSON response with GZip compression?如何让 ASP.NET AJAX 使用 GZip 压缩发送其 JSON 响应?
【发布时间】:2010-09-19 15:25:40
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net ajax json gzip


    【解决方案1】:

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

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

    如果您对所有 Ajax 响应进行 GZip 压缩,您的应用会变得非常慢...!

    【讨论】:

    • 客户端的强调非常重要。此外,请注意何时压缩,何时不压缩。事实上,有时压缩实际上会在解压缩之前使对象变大。使用 MVC,它可以在任何 ASP.NET 应用程序中完成,我通过创建一个从 ActionFilterAttribute 继承的类来为我的控制器操作创建一个注释。在类中,我拉出接受编码标头 filterContext.HttpContext.Request.Headers["Accept-Encoding"],并检查放气或 gzip。如果它们存在并且满足我的业务特定条件,我会放气或 GZipStream。
    【解决方案2】:

    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" />
    

    【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      另外,您是否为 ASMX 文件启用了压缩功能?

      【讨论】:

      • 我们如何为 ASMX 文件启用压缩?有参考吗?
      猜你喜欢
      • 2010-09-19
      • 2015-08-06
      • 2013-05-21
      • 2020-02-25
      • 1970-01-01
      • 2023-04-09
      • 2013-11-14
      • 1970-01-01
      • 2012-02-12
      相关资源
      最近更新 更多