首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当内容长度为零时强制读取HttpWebResponse.GetResponseStream()

当内容长度为零时强制读取HttpWebResponse.GetResponseStream()
EN

Stack Overflow用户
提问于 2013-09-30 10:31:32
回答 2查看 228关注 0票数 1

就像书名说的。

有时候,来自远程服务器的HTTP响应包含具有零值的内容长度标头,但仍然返回HTTP 。仍然可以在浏览器中使用jQuery获取主体,但是使用HttpWebResponse.GetResponseStream()无法读取任何内容。我怎么才能勉强读出来呢?谢谢大家。

下面是我遇到的HTTP响应的一个例子。

HTTP/1.1 200正常

连接:保持连接

缓存-控制:无缓存,无存储

内容-类型:文本/纯文本

内容长度:0

日期:2013年9月30日星期一09:34:21格林尼治时间

(HTTP车身)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-30 11:49:28

通过查看源代码,我无法找到强制执行此行为的方法。也许你什么也做不了。

尝试禁用HTTP管道。在这种情况下,HttpWebRequest可能不依赖于内容长度。这不太可能有帮助。

要么使用不同的HTTP库,要么使用TcpClient发送请求。您可以使用Fiddler复制一个模板HTTP请求,并使用它作为您的基础。不应该是很多工作。

您还可以创建删除头的重写代理。这可能是个很费劲的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2013-09-30 18:43:24

第一个问题--您从哪里得到HTTP响应的?您是用Fiddler捕获它,还是通过在调试器中检查HttpWebResponse来输入您认为正在看到的内容?我建议使用Fiddler运行这个程序,并检查完整的响应头(如果您还没有这样做)。

我们需要首先确定内容长度是否返回值为零,或者项目中的其他代码是否导致您将其解释为零,或者将内容长度的副本设置为零。

我认为这里发生了两件事:

  1. 反应并不完全像你上面所指出的那样,用Fiddler来检查它会很快建立起来。我很可能怀疑内容长度实际上是缺失的,传输编码是存在的,并设置为块;在这种情况下,HttpWebResponse.ContentLength属性将返回-1而不是0(0)。
  2. 响应与您所指示的完全相同(特别是在内容长度存在并指定为零的情况下),在这种情况下,您的web服务器就会崩溃。我不应该返回一个内容长度设置为零的主体;如果它是HTTP1.0,它可以不返回任何内容长度,但它显然上面写着HTTP1.1,所以它应该返回传输-编码:分块和没有内容长度,或者一个非零内容长度,如果不分块并返回一个主体。

哈罗德

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19091952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档