【问题标题】:GZIP output streamGZIP 输出流
【发布时间】:2023-03-18 17:35:01
【问题描述】:

我正在尝试对一些通过 HTTP(不是 Web 服务)流式传输的 XML 进行 GZIP 处理

if (ZipOutput)
{
    output = new GZipStream(Context.Response.OutputStream, CompressionMode.Compress);
    Context.Response.AppendHeader("Content-Encoding", "gzip");
}
else
{
    output = Context.Response.OutputStream;
}

EscapeXMLTextWriter xmlWriter = new EscapeXMLTextWriter(output, new UTF8Encoding())
{
    Formatting = Formatting.Indented
};

ZipOutputtrue,但响应似乎没有被压缩。任何指针,替代技术?

我知道我可以使用SharpZipLib,但想在框架中使用GZipStream 类。

【问题讨论】:

  • 一个猜测:也许浏览器“有帮助”解压缩响应?尝试Fiddler 以真正看到响应。
  • 我不这么认为,我正在使用 firebug 来检查响应,无论我是否通过 zip 开关,响应大小都是相同的。奇怪的是它在本地工作。在 IIS 中启用了静态和动态内容的压缩。看起来可能还有一些额外的手动配置来启用压缩。stackoverflow.com/questions/702124/enable-iis7-gzip。我没有对我的本地 IIS 安装进行任何这些更改,所以不确定为什么它会在本地而不是生活。

标签: c# .net xml gzipstream


【解决方案1】:

在我看来,您的代码应该可以工作 - 或许可以使用调试器逐步检查代码是否真的如您所想的那样被调用。

在 - http://www.west-wind.com/weblog/posts/2007/Feb/05/More-on-GZip-compression-with-ASPNET-Content 上有一篇很好的文章(包括一种替代技术)

【讨论】:

  • 谢谢,我会审核并回复。
  • 我想我的原始代码来自 Rick 的文章。我已经在本地单步执行了代码,它按预期运行,但是没有压缩。请参阅上面的我的 cmets,这表明在 IIS 7 上启用 Gzip 压缩需要一些额外的配置
  • 这不应该与 IIS 有任何关系 - 您正在实现自己的压缩,而不是在此处使用 IIS 模块/处理程序。可能值得使用 fiddler 查看浏览器在 http 级别接收到的内容。我真的认为这应该有效(所以我分享你的挫败感!)。是否有任何人都可以查看的公共 URL?
  • fiddler 会给我比 Firebug 更多的信息吗?我在 Firebug 中尝试过,没有看到 Content-Encoding 标头,并且报告的文件大小是相同的“有”或没有压缩。
  • 在回答您关于公共 URL 的问题时,有一个,但很遗憾,我不能透露它,因为提要数据很敏感。
【解决方案2】:

我想出了这个问题 - 原来办公室防火墙正在剥离出站请求的 Accept-Encoding 标头。

【讨论】:

  • 我不太明白这如何解决您的问题 - 我以为您确定 if (ZipOutput) 的评估结果为真?
  • @Stuart - 抱歉 - 代码示例没有说清楚,但 ZipOutput 不是检测 Accept-Encoding 标头的标志,而是可选查询字符串参数 (&zip=1 )。回想起来,它也需要检查标题。
  • 啊 - 我明白了 - 所以你的问题中说“ZipOutput 是真的”是错误的。谢谢
猜你喜欢
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
相关资源
最近更新 更多