【问题标题】:Why HttpWebResponse.ContentLength returns -1 all of a sudden?为什么 HttpWebResponse.ContentLength 突然返回 -1?
【发布时间】:2013-03-15 13:09:26
【问题描述】:

我们这里有一个特殊的问题。 我们在客户端有一个代码,可以使用 HTTPWebResponse/HttpWebRequest 从 Web 服务器下载一些文件 我们正在使用HttpWebResponse.ContentLength 来获取文件的大小...... 这些天它工作正常,但突然开始给出-1 但是,当我们绕过服务器上的负载均衡器时,它可以工作.. 任何人都可以就为什么会发生这种情况给出一个公平的想法

【问题讨论】:

    标签: c# .net httpwebresponse http-content-length


    【解决方案1】:

    来自 MSDN 在HttpWebResponse.ContentLength property 上的文档:

    如果响应中未设置 Content-Length 标头,则 ContentLength 设置为值 -1。

    简单地说——服务器没有发送Content-Length标头。

    【讨论】:

    • 嗨甜甜圈..但服务器正在发送响应......在我的情况下,我可以从服务器下载文件..但只有 Content-Length 属性返回 -1
    • @Sathish 我知道正在发送响应的正文,但 Content-Length 标头不同(这就是服务器未发送的内容)。
    • 那么我应该如何解决这个问题.. 我需要在服务器端或 IIS 设置上检查什么
    【解决方案2】:

    HttpWebResponse.ContentLength 只报告服务器在Content-Length 标头中发送的内容。或者,如果服务器没有发送任何内容,它可能会报告 -1。

    不管是什么问题,都出在服务器上,而不是HttpWebResponse

    既然你说如果禁用负载平衡器问题就会消失,我怀疑至少有一个被负载平衡器激活的服务器没有设置标头。

    【讨论】:

    • 谢谢吉姆!我使用这个内容长度来获取文件的大小以相应地更新进度条..但是文件被下载了..所以我得到了服务器的响应..
    • 是的,服务器正在发送响应,但没有设置Content-Length 标头。
    • 我需要研究 IIS 来解决这个问题吗?
    • @Sathish:我不是 IIS 专家,所以我没有任何细节可以告诉你。您可以搜索 [IIS 内容长度负载平衡器] 并查看出现了什么。或在 superuser.com 上发布问题。
    猜你喜欢
    • 2018-08-17
    • 1970-01-01
    • 2011-08-14
    • 2012-01-25
    • 2012-03-05
    • 2017-06-04
    • 2015-01-25
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多