Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING错误

166
在过去的两个月中,我一直在Chrome开发者控制台上收到以下错误消息:
net::ERR_INCOMPLETE_CHUNKED_ENCODING

症状:

  • 页面无法加载。
  • CSS和JS文件被截断。
  • 页面卡住。

服务器环境:

  • Apache 2.2.22
  • PHP
  • Ubuntu

在我们内部的Apache服务器上,我遇到了这个问题。其他人都没有遇到这个问题 - 也就是说,我们公司的用户和开发团队中没有人遇到这个问题。

其他人使用完全相同版本的Chrome访问相同的服务器。我还尝试禁用所有扩展并使用隐身模式浏览,但没有效果。

我使用Firefox时也出现了完全相同的情况。唯一的区别是Firefox没有引发任何控制台错误,所以您需要通过Firebug检查HTTP请求来查看问题。

Apache的响应头:

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分钟,然后它会重新出现。


您在 while 循环中创建链接吗?如果是这样,您是否创建不带完整 URL 的链接(相对链接)?另外,您可以发布更多代码吗? - Sven van den Boogaart
你能添加你的Apache访问和错误日志吗? - Halayem Anis
1
还有,需要知道这段代码 while($row = mysql_fetch_assoc($result)) 生成的HTML可能会有太多的空行,导致网页浏览器截断。 - Halayem Anis
7
如果客户端未收到分块传输的最后一个长度为0的块,则会引发该错误。如果是我,我会启动Wireshark并捕获TCP流量以查看情况。 - aergistal
2
这可能是由于网络问题而不是应用程序问题引起的(特别是因为只有您遇到了此问题)。因此,建议您首先通过监视流量来排除网络问题作为可能的原因,正如@aergistal所建议的那样。 - VolenD
显示剩余12条评论
43个回答

88

好的,我已经进行了三次测试,并百分之百确定这是由我的反病毒软件(ESET NOD32 ANTIVIRUS 5)引起的。

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

刚才,我重新打开它,但问题在一分钟内就出现了。

在过去的24小时中,我多次开启和关闭实时保护,只为确保。每次,结果都是相同的。

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


1
当您使用防病毒软件并发送内容长度标头时,是否有效? 如果问题是Eset +从任何IP访问您的页面,那么修复它可能是一个好主意。 提供内容长度标头不会有任何损失,每个请求可能只需要1毫秒。 - twicejr
3
根据长期经验,杀毒软件所造成的危害要大于其所带来的好处。 - Shadow The Spring Wizard
1
根据我的回答更新 - 我能够复制这个错误。它发生在输出缓冲期间,PHP抛出了致命错误导致输出变形。 - Matthew Brown aka Lord Matt
2
AVAST也有同样的问题...它变得如此糟糕,以至于我甚至无法访问一些网站。我禁用了网页扫描功能,一切都恢复正常了... - patrick
4
对我来说,Avast也是问题所在。具体来说,是Web Shield下的脚本扫描选项。 - Juha Untinen
显示剩余8条评论

59

错误是指在发送页面时Chrome被切断了。你需要解决的问题是找出为什么会发生这种情况。

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

另一方面,可能是服务器没有发送终端的0长度块。可以通过 ob_flush(); 来修复这个问题。也有可能是 Chrome(或连接或其他原因)太慢了,导致连接关闭时页面还没有加载完成。我不知道为什么会发生这种情况。

以下是谨慎程序员的回答:

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

在您的情况下,可能是脚本超时的情况。我不确定为什么只会影响您,但这可能与一些竞争条件有关?这只是一个猜测。您可以通过延长脚本执行时间来测试这一点。

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

这个问题可能很简单,只需要更新您的Chrome安装程序(因为这个问题与Chrome有关)。

更新:我最终能够复制此错误,当PHP(在同一台localhost上)正在执行输出缓冲时,抛出致命错误。 我想输出内容被弄得太糟糕了,没有多大用处(标题但几乎没有内容)。

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


我不知道,但这对我来说非常有用:set_time_limit(30); - Zhang Buzz
1
增加内存限制对我的情况有所帮助:ini_set('memory_limit','500M'); - BenK
问题实际上是当您关闭连接而不刷新响应时。这会导致 Chrome 无法接收流的最后一个字节。在 vertx 中,请使用 response.end() 而不是 response.close()。 - MUNGAI NJOROGE

50

我曾经遇到了这个问题。在尝试了本问题中大部分其他答案之后,我找到了问题所在。它是由于/var/lib/nginx目录以及更具体地说/var/lib/nginx/tmp目录的所有者和权限设置不正确所导致的。

临时目录被用于fast-cgi缓存生成的响应,但仅当它们的大小超过一定限制时才会缓存。因此,该问题是间歇性的,只有在生成的响应很大时才会出现。

查看nginx <host_name>.error_log以查看是否存在权限问题。

为了修复问题,请确保/var/lib/nginx目录及其所有子目录的所有者和组均为nginx。

我还曾遇到过当存储设备上的空间过低无法创建临时文件时间歇性出现此问题的情况。在这种情况下,解决方法是释放设备上的一些空间。


6
我也遇到了同样的问题,对 /var/lib/nginx 运行 chown 命令解决了它。 - Yoav Aharoni
3
我也遇到同样的问题,不过我的自制安装程序创建了一个 /usr/local/var/run/nginx/fastcgi_temp 目录,我需要将其设为可读写权限。 - cjn
我也遇到了类似的问题,但在我的情况下,权限问题与其他目录有关:**/etc/nginx/proxy_temp/**。修复了这个问题后,至少目前为止,问题消失了。 - Shidersz
在我的情况下,问题似乎与 SSL 证书过期有关。 - dvlcube
这里又是一个使用自制软件(M1 Mac,macOS 11.5.2)的用户。我需要更改所有者的目录位于/opt/homebrew/var/run/nginx/fastcgi_temp - 0Seven
显示剩余2条评论

20
以下内容应该能够解决每个客户端的问题。

//Gather output (if it is not already in a variable, use ob_start() and ob_get_clean() )    

// Before sending output:
header('Content-length: ' . strlen($output));

但在我的情况下,以下选项更好,并且也解决了这个问题:

.htaccess:

php_value opcache.enable 0

1
这真的为我解决了问题。我正在通过ajax在div中加载PHP生成的内容,并且当文件超过2MB时,Chrome会出现net :: ERR_INCOMPLETE_CHUNKED_ENCODING错误3次中有2次。添加Content-length修复了我的问题。谢谢! - Adrian P.
这个解决方案对我们很有效,我们的网站使用angular读取json...在我们的情况下,是在.htaccess中加入了php_flag opcache.enable Off。我们知道这与防病毒软件无关,因为即使在mac上也会出现此问题。谢谢! - danielgc
太好了 :) Web服务器是否正在运行PHP 5.6?升级到PHP 7也将解决此问题,我认为至少是我的经验! - twicejr
这个问题我深有同感!我们正在开发一个Drupal 8网站时也遇到了这个问题。当我设置合并CSS和JS时,在Chrome中加载管理员页面就会出现问题,但在Firefox中没有问题。 - Andrew Wasson
如何在基于JSP-Servlet的应用程序中,在Tomcat服务器上部署时实现此功能。 - Shubham Arya

19

哇,我5分钟前刚刚解决了同样的问题。我花了几个小时才找到解决方法。在Windows上,第一眼看到禁用杀毒软件可以解决问题。但是后来我发现其他没有杀毒软件的Linux电脑上也有这个问题。Nginx日志中没有错误。我的uwsgi显示有关“Broken pipe”的信息,但并非所有请求都会出现这个问题。

知道吗?原来是因为设备上没有剩余空间,当我重新启动数据库日志时发现了这一点,并使用df确认了这一点。唯一关于为什么杀毒软件能解决这个问题的解释是它在某种程度上防止浏览器缓存(它应该检查每个请求),但浏览器具有一些奇怪的行为,可能会忽略错误的响应并显示缓存的响应。

更新:

为了监控磁盘空间并实时向Slack/Telegram/Email发送警报,我公司(几年后撰写本答案后创立的公司)创建了开源工具https://github.com/devforth/hothost


2
我在这个问题上摸索了最后24小时,你真的救了我。这是因为根分区已满,正好出现在我的Django安装中,Pgbouncer日志填满了根分区。谢谢你啊。 - Anoop Reghuvaran
1
救了我!我的根分区已满,也影响了nginx。 - chrismarx
当nginx / var文件系统中没有足够的空间时,会出现相同的错误。使用df -h检查使用情况并释放一些空间即可解决问题。 - Dinushika Rathnayake
你救了我的命,谢谢。 - undefined

12

如果您在本地主机能够获得正确的响应,但遇到了这种错误,并且正在使用 nginx

  1. 进入服务器并打开 nginx.conf 文件:

    nano etc/nginx/nginx.conf

  2. 在 http 块中添加以下行:

    proxy_buffering off;

  3. 保存并退出文件。

这解决了我的问题。


1
谢谢!这对我在本地网络中尝试访问另一台计算机的服务器非常有帮助。 - MikeSpiris
1
这对我也有效。 - Sisila Priyankara
通常这是由于对 /var/lib/nginx/fastcgi 的写入权限错误所致,请确保所有者与 nginx.conf 中设置的相匹配。 - soulseekah
这对我有用。谢谢伙计。 - shellking4

9
在我的情况下,我遇到了 /usr/local/var/run/nginx/fastcgi_temp/3/07/0000000073" failed (13: Permission denied) 这个问题,可能是导致 Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING 错误的原因。
我需要删除 /usr/local/var/run/nginx/ 并让 nginx 再次创建它。
$ sudo rm -rf /usr/local/var/run/nginx/
$ sudo nginx -s stop
$ sudo mkdir /usr/local/var/run/nginx/
$ sudo chown nobody:nobody /usr/local/var/run/nginx/
$ sudo nginx

在Mac上,我最终通过brew卸载和重新安装了nginx,然后停止并启动了nginx,问题解决了!感谢您的帖子。 - phyatt

4
对我来说,这是由硬盘上剩余空间不足导致的。

4
这是一个已知的Chrome问题。根据Chrome和Chromium bug跟踪器,目前没有通用的解决方案。这个问题与服务器类型和版本无关,它就在Chrome中存在。
将Content-Encoding头设置为identity对我来说解决了这个问题。
来自developer.mozilla.org 表示恒等函数(即不压缩,也不修改)。
因此,我可以建议,在某些情况下,Chrome无法正确执行gzip压缩。

4

请提供更多关于何时会发生这种情况的上下文信息,而不是仅仅从另一个网站复制。 - Akaisteph7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接