net::ERR_INCOMPLETE_CHUNKED_ENCODING 是啥意思,我该如何解决?

Posted

技术标签:

【中文标题】net::ERR_INCOMPLETE_CHUNKED_ENCODING 是啥意思,我该如何解决?【英文标题】:What does net::ERR_INCOMPLETE_CHUNKED_ENCODING mean and how may I resolve it?net::ERR_INCOMPLETE_CHUNKED_ENCODING 是什么意思,我该如何解决? 【发布时间】:2014-07-05 11:02:08 【问题描述】:

我正在编写一个从 Bing Ads API 生成报告的 Web 应用程序,如下所示:

http://msdn.microsoft.com/en-us/library/bing-ads-reporting-request-and-download-a-keyword-performance-report-in-php.aspx

我已经编译了代码,但是在运行时,服务器突然结束请求并在此代码块的开头返回 ERR_INCOMPLETE_CHUNKED_ENCODING:

$waitTime = 30 * 1; 
$reportRequestStatus = null;

// This sample polls every 30 seconds up to 5 minutes.
// In production you may poll the status every 1 to 2 minutes for up to one hour.
// If the call succeeds, stop polling. If the call or 
// download fails, the call throws a fault.

for ($i = 0; $i < 10; $i++)

    sleep($waitTime);

    // PollGenerateReport helper method calls the corresponding Bing Ads service operation
    // to get the report request status.

    $reportRequestStatus = PollGenerateReport(
            $proxy, 
            $reportRequestId
            );

    if ($reportRequestStatus->Status == ReportRequestStatusType::Success ||
        $reportRequestStatus->Status == ReportRequestStatusType::Error)
    
        break;
    

我试图打印出值并逐行调试,但我无法弄清楚是什么导致了这个错误。谷歌搜索错误也不会显示任何相关内容。我想知道是否有其他人以前遇到过这个错误,能告诉我是什么原因造成的吗?

谢谢!

【问题讨论】:

【参考方案1】:

如果我没记错的话 - 这是由于您的服务器配置为处理各种请求。

ASP.NET 有一些配置设置,但简而言之,如果您在分块请求完成之前刷新缓冲区,您将收到此错误。这是我前段时间遇到类似问题时找到的链接。祝你好运!

编辑:此外,这里有一个 IIS 页面,描述了如何启用可能导致您的问题的响应处理: 启用或禁用 HTTP 1.1 分块传输编码

为万维网启用 HTTP 1.1 分块传输编码 发布服务,使用以下语法:appcmd set config /section:asp /enableChunkedEncoding:True|False True 启用 HTTP 1.1 分块传输编码,而 False 禁用 HTTP 1.1 分块 传输编码。默认值为 True。

..

指定 ASP 页面让脚本运行的默认时间长度 在终止脚本并将事件写入 Windows 之前 事件日志,使用如下语法:appcmd set config /section:asp /scriptTimeout: timeSpan 变量timeSpan代表最大值 在写入事件之前 ASP 请求可以运行的时间 (hh:mm:ss) 到 Windows 事件日志。默认值为 00:01:30。 http://technet.microsoft.com/en-us/library/cc730855(v=ws.10).aspx

这家伙也解释得很好:

如果您过早刷新响应,ASP.NET 以分块编码(Transfer-Encoding: chunked)将数据传输到客户端 Http 请求的流和 Content-Length 标头 响应不是您明确设置的。

通常这应该不是问题,因为大多数现代 HTTP 客户端 能够处理分块和非分块服务器 响应,自动分块响应(请注意 分块传输编码仅由 HTTP 1.1 规范定义)。

但是,在我自己的情况下,我正在对一个 来自 javascript 的 ASP.NET Web 服务。而网络方法处理 请求将响应显式刷新到客户端,然后关闭 响应(我需要这样做,因为请求是从 ExtJs 商店的自动加载调用,我需要关闭 服务器上的连接,供客户端 Store 接受和加载 json序列化数据)。

http://www.rahulsingla.com/blog/2010/06/asp-net-sets-the-transfer-encoding-as-chunked-on-premature-flushing-the-response

【讨论】:

谢谢!我会仔细看看的。解决方案很简单吗? 一些什么 - 它只是需要一些关于 IIS 内部工作的阅读,我当时想知道,但是嘿 - 它建立了性格,对吗? 我不再获得ERR_INCOMPLETE_CHUNKED_ENCODING,因此修改Content-Length 确实“解决”了该特定错误。但是,现在我收到了ERR_CONTENT_LENGTH_MISMATCH,有什么建议吗? 刚刚用更多信息更新了我的答案。本质上,它是设置的混合结果,您需要查看并最终评估最适合您的环境和应用程序的设置。 再次感谢,这无疑为解决方案提供了一些材料。我会看看我想出什么,然后告诉你结果!

以上是关于net::ERR_INCOMPLETE_CHUNKED_ENCODING 是啥意思,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章