当Content-Encoding为空时,为什么HttpWebResponse尝试使用GZip解压缩流?

时间:2012-02-19 11:01:57

标签: c# .net httpwebrequest httpwebresponse gzipstream

我看了很多Q& As围绕这个主题,并且到了我使用以下代码以获取给定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流。

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

  

内容编码:gzip,放气

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

.NET框架将此标题空白作为自动解压缩的一部分。我认为这是因为你要求框架自动处理它,并且你不再压缩你得到的响应流。

我必须通过检查源代码HttpWebResponse at Microsoft

来查看自己