如何读取Content-Length 0的响应?

时间:2019-06-13 11:54:28

标签: c# http networking

我需要读取响应的正文,其中Content-Length被明确指定为零。但是stream.Read不会读取任何内容并返回0。如果Content-Length标头不存在,它将成功读取所有字节。

当我在浏览器中打开网页时,它是空的,但是我可以在Fiddler中看到其内容。

有什么方法可以使Stream为0时从GetResponseStream返回的Content-Length读取字节吗?

示例响应:

HTTP/1.1 200 OK
Cache-Control: public, must-revalidate
ETag: "c7f40cb26b1e95c2245f1584371465582f996a8a88b34a2cc99bbe922b1a2857"
Vary: Accept-Encoding
X-Request-Id: 4b799b6d-cd68-47f7-a392-4fd0a327f5de
X-Runtime: 0.001646
Content-Length: 0

- some content -

代码的简化版本:

using(var stream = httpRes.GetResponseStream())
{
     while (true)
     {
          var bytesRead = stream.Read(
                            responseBuffer,
                            0,
                            responseBuffer.Length);

          // other stuff
     }
}

1 个答案:

答案 0 :(得分:1)

当HTTP / 1.1的Content-Length:0时,根据定义,没有有效载荷要读取。如果后面跟随字节,则按照定义,它们是对后续请求的响应。

现在,显然,这里不是这种情况。因此,请绝对清楚:您正在寻求一种解决方法来处理损坏的服务器。相反,修复服务器会更清洁。