铬网::ERR_INCOMPLETE_CHUNKED_ENCODING错误

在过去的两个月中,我在Chrome的开发者控制台上收到了以下错误:

net::ERR_INCOMPLETE_CHUNKED_ENCODING

症状:

  • 页面未加载。
  • 截断的 CSS 和 JS 文件。
  • 页面挂起。

服务器环境:

  • 阿帕奇 2.2.22
  • 菲律宾比索
  • 乌班图

这发生在我内部Apache服务器上。它没有发生在其他任何人身上 - 即我们的用户都没有遇到这个问题 - 我们的开发团队中的其他人也没有。

其他人正在访问具有完全相同版本的Chrome的完全相同的服务器。我还尝试禁用所有扩展程序并在隐身模式下浏览 - 没有效果。

我使用过Firefox,并且发生了完全相同的事情。截断的文件等等。唯一的问题是,Firefox不会引发任何控制台错误,因此您需要通过Firebug检查HTTP请求才能看到问题。

来自 Apache 的 Response Headers:

Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:close
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Mon, 27 Apr 2015 10:52:52 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Pragma:no-cache
Server:Apache/2.2.22 (Ubuntu)
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-Powered-By:PHP/5.3.10-1ubuntu3.8

在测试时,我能够通过在我的htaccess文件中强制HTTP 1.0来解决这个问题:

SetEnv downgrade-1.0

这摆脱了问题。但是,强制HTTP 1.0而不是HTTP 1.1并不是一个正确的解决方案。

更新:因为我是唯一遇到此问题的人,所以我认为我需要花更多时间调查它是否是客户端问题。如果我进入Chrome的设置并使用“恢复到默认值”选项,则问题将消失约10-20分钟。然后它返回。


答案 1

还行。我已经对此进行了三重测试,我100%确定它是由我的防病毒(ESET NOD32 ANTIVIRUS 5)引起的。

每当我禁用实时保护时,问题就会消失。今天,我将实时保护关闭了6-7个小时,问题从未发生过。

不久前,我重新打开了它,只是为了让问题在一分钟内浮出水面。

在过去的24小时内,我再次打开了和关闭实时保护,只是为了确定。每次 - 结果都是一样的。

更新:我遇到了另一位开发人员,他在卡巴斯基反病毒软件的实时保护方面遇到了完全相同的问题。他禁用了它,问题就消失了。即,此问题似乎不仅限于 ESET。


答案 2

该错误试图说Chrome在发送页面时被切断。您的问题是试图找出原因。

显然,这可能是一个影响几个版本的Chrome的已知问题。据我所知,这是一个问题,这些版本对所发送的块的内容长度和该块的表达大小非常敏感(我可能离那个版本很远)。简而言之,这是一个稍微不完美的标题问题。

另一方面,可能是服务器不发送终端 0 长度块。这可以通过 .也有可能是Chrome(或连接或其他)速度很慢。因此,当连接关闭时,页面尚未加载。我不知道为什么会发生这种情况。ob_flush();

以下是偏执的程序员的答案:

<?php
    // ... your code
    flush();
    ob_flush();
    sleep(2);
    exit(0);
?>

在您的情况下,这可能是脚本超时的情况。我真的不确定为什么它应该只影响你,但它可能归结为一堆竞争条件?这是一个彻头彻尾的猜测。您应该能够通过延长脚本执行时间来对此进行测试。

<?php
    // ... your while code
    set_time_limit(30);
    // ... more while code
?>

它也可能像您需要更新Chrome安装一样简单(因为此问题是Chrome特定的)。

更新:当PHP(在同一本地主机上)输出缓冲时抛出致命错误时,我能够(最后)复制此错误。我想输出太严重了,没有多大用处(标题,但很少或没有内容)。

具体来说,我不小心让我的代码递归调用自己,直到PHP正确地放弃了。因此,服务器没有发送终端 0 长度块 - 这是我之前发现的问题。


推荐