【问题标题】:Why does HttpWebResponse try to decompress the stream using GZip when Content-Encoding is empty?为什么当 Content-Encoding 为空时,HttpWebResponse 会尝试使用 GZip 解压流?
【发布时间】:2012-03-10 01:17:43
【问题描述】:

我已经查看了很多关于这个主题的问答,我使用以下代码从给定的 URI 中获取字节:

var request = (HttpWebRequest)WebRequest.Create(uri);
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
var response = request.GetResponse();
var stream = response.GetResponseStream();
if (stream != null)
{
    var buffer = new byte[4097];
    var memoryStream = new MemoryStream();

    do
    {
        var count = stream.Read(buffer, 0, buffer.Length);
        memoryStream.Write(buffer, 0, count);

        if (count == 0)
            break;
    } while (true);

    return memoryStream.ToArray();
}

response.Close();

return null;

现在,对于某个 URI(指向文件),在调试时,我看到 Web 响应的“Content-Encoding”标头等于空(“”),但是当尝试从流,它抛出一个异常:

System.IO.InvalidDataException:GZip 标头中的幻数不正确。确保您传递的是 GZip 流。

在开发工具中调试相同的 URI 时,我会在响应标头上看到:

内容编码:gzip,deflate

所以我真的不知道会发生什么。

关于如何避免此异常并成功读取文件字节的任何线索和想法?

谢谢!

【问题讨论】:

    标签: c# .net httpwebrequest httpwebresponse gzipstream


    【解决方案1】:

    .NET 框架将此标头作为自动解压缩的一部分清除。我认为这是因为您要求框架自动处理它,并且您返回的响应流不再被压缩。

    我必须自己通过检查源代码HttpWebResponse at Microsoft来查找它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      • 2015-12-13
      相关资源
      最近更新 更多