Chrome网络:: ERR_INCOMPLETE_CHUNKED_ENCODING错误


134

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

net::ERR_INCOMPLETE_CHUNKED_ENCODING

症状:

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

服务器环境:

  • 阿帕奇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.1上强制HTTP 1.0是不合适的解决方案。

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


你忘记了刹车。这是正确的-> while($ row = mysql_fetch_assoc($ result))
JustAnotherSimpleProgrammer__

@PHPMan没有正确复制和粘贴。立即修复。我希望那是原因。
韦恩·惠蒂

1
同样,需要知道此代码生成的HTML while($row = mysql_fetch_assoc($result))可能是太多的空行,从而导致Web浏览器被截断
Halayem Anis 2015年

7
如果客户端未收到分块传输的最终0长度块,则会引发该错误。在您的位置,我将启动Wireshark并捕获TCP流量以查看发生了什么。
aergistal

2
这可能是由网络问题引起的,而不是由应用程序问题引起的(尤其是因为您是唯一的网络问题)。因此,您可能应该首先通过监视流量来尝试排除网络问题,这是可能的原因,如@aergistal建议。
VolenD

Answers:


78

好。我对此进行了三重测试,我100%确信它是由我的防病毒软件(ESET NOD32 ANTIVIRUS 5)引起的。

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

片刻之前,我重新打开了电源,只是为了在一分钟内解决问题。

在过去的24小时中,为确保安全,我已重新打开和关闭实时保护。每次-结果都是一样的。

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


1
当您确实使用防病毒软件并发送内容长度标头时,它是否起作用?如果问题是Eset +通过任何IP访问您的网页,则最好对其进行修复。提供内容长度的报头不会受到影响,每个请求的成本可能为1ms。
twojr 2015年

1
从长期的经验来看,反病毒带来的弊大于利。
暗影巫师为您而耳

1
对于卡巴斯基遇到此问题的任何人,问题都在于它的“将脚本注入网络流量”功能。您可以在网络设置中找到它。
Hele

2
AVAST也有同样的问题...太糟糕了,我什至无法访问某些网站。我禁用了网络扫描,一切恢复正常……
patrick

3
是的,Avast也是我的问题。特别是Script ScanningWeb Shield下的选项。
Juha Untinen

47

该错误试图说明在发送页面时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(在同一本地主机上)被抛出致命错误时,我能够复制此错误(最后)输出缓冲。我以为输出太糟糕了而无法使用(标题,但内容很少或没有内容)。

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


我不知道,但这对我真的很有用:set_time_limit(30);
张巴兹

1
增加内存限制对我的情况有帮助:ini_set('memory_limit','500M');
BenK

问题实际上是当您关闭连接而不刷新响应时。这会导致Chrome无法接收到流的最后一个字节。在vertx中,执行response.end()而不是response.close()
MUNGAI NJOROGE

30

我有这个问题。在尝试了该问题的其他答案后,对其进行了追踪。这是由目录所有者和权限造成的/var/lib/nginx,更具体地说是/var/lib/nginx/tmp目录不正确。

快速cgi使用tmp目录在生成响应时将其缓存,但前提是它们大于一定大小。因此,此问题是间歇性的,仅在生成的响应较大时才会发生。

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

要解决此问题,请确保所有者/var/lib/nginx和所有子目录的组均为nginx。


3
同样在这里,chown在/ var / lib / nginx上为我修复了它
Yoav Aharoni

2
同样在这里,但是我的自制程序安装创建了一个/ usr / local / var / run / nginx / fastcgi_temp目录,我必须授予该目录的读/写权限。
cjn

我遇到了类似的问题,但就我而言,权限问题与其他目录/ etc / nginx / proxy_temp /有关。修复此问题后,至少到目前为止,问题消失了。
Shidersz

就我而言,问题似乎与SSL证书已过期有关。
dvlcube

18

以下应针对每个客户端进行修复。

//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错误从2变为2。添加Content-length解决了我的问题。谢谢!
Adrian P.

这个解决方案对我们有用,有一个站点angular在读取json ...在我们的例子中,它是.htaccess中的php_flag opcache.enable Off。我们知道它与防病毒软件无关,因为即使在Mac上,我们也存在此问题。谢谢!!
danielgc

太好了:)网络服务器运行的是PHP 5.6吗?我想,升级到PHP 7也可以解决该问题。至少那是我现在的经验!
twojr

这^^^这千倍!我在我们正在开发的Drupal 8网站上遇到了这个问题。我将其设置为聚合CSS和JS后,就开始无法在Chrome中加载管理页面。在Firefox中没有问题。
安德鲁·沃森,2016年

如何在部署在tomcat服务器上的基于jsp-servlet的应用程序中执行此操作
Shubham Arya,

14

天哪,我5分钟前解决了同样的问题。我花了几个小时找到解决方案。乍一看,禁用防病毒软件可以解决Windows上的问题。但是后来我注意到其他没有防病毒功能的Linux PC上存在问题。Nginx日志中没有错误。我uwsgi展示了一些有关“断管”的信息,但不是所有请求都显示了。知道什么?设备上没有剩余空间,我在数据库日志中重新启动服务器时发现了该空间,并df批准了这一点。关于为什么解决防病毒的唯一解释是,它阻止了浏览器缓存(它应该检查每个请求),但是具有某些奇怪行为的浏览器可以简单地忽略不良响应并显示缓存的响应。


1
在过去的24小时里一直在摸索着这个问题,您真的救了我。这是因为有一个完整的根分区,这是在我的django安装中,pgbouncer日志填满了根分区。感谢的人
Anoop氩

救了我!我的根分区已满,也影响了
Nginx

6

就我而言,/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

4

这是已知的Chrome问题。根据Chrome和Chromium错误跟踪器的说法,尚无通用解决方案。此问题与服务器类型和版本无关,在Chrome中是正确的。

设置Content-Encoding标题可以identity解决这个问题。

来自developer.mozilla.org

身份| 指示身份功能(即无压缩或修改)。

因此,我建议在某些情况下Chrome无法正确执行gzip压缩。


3

我只是盯着一个类似的问题。并注意到只有在页面包含序号大于255(即多字节)的UTF-8字符时才会发生这种情况。

最终成为问题的是如何计算Content-Length标头。基础后端是计算字符长度,而不是字节长度。关闭内容长度标头可以暂时解决此问题,直到可以修复后端模板系统为止。



3

当我遇到这个错误时(从javascript进行AJAX调用时);原因是控制器的响应是错误的;它返回的不是有效格式的JSON。


2

这里的问题是我的Avast AV。我一禁用它,问题就消失了。

但是,我真的很想了解这种现象的原因。


2

如果有人可能对MOODLE遇到相同的问题,我只是想与您分享我的经验。

我们的情绪平台突然变得非常缓慢,仪表板的加载时间比平常多了2-3倍(最多6秒钟),而且有时某些页面根本没有加载(不是404错误,而是空白页面) )。在开发人员工具控制台中,看到以下错误:net::ERR_INCOMPLETE_CHUNKED_ENCODING.

搜索此错误,看起来好像是Chrome的问题,但是我们遇到了各种浏览器的问题。经过数小时的研究并比较了我终于发现问题前几天的数据库,有人打开了事件监视。但是,在“配置更改”日志中,此更改是不可见的!关闭事件监视,最终解决了问题-我们没有为事件监视定义任何规则。

我们正在使用MariaDB和PHP 5.4运行Moodle 3.1.2+。


2

这发生在相隔数年的两个不同客户端的服务器上,使用了当时在数百台其他服务器上部署的相同代码而没有出现问题。

对于这些客户端,这主要发生在具有流HTML的PHP​​脚本上-即“连接:关闭”页面,在这些页面上,输出可用时将其发送到浏览器。

事实证明,在脚本完成之前和任何超时之前,PHP进程与Web服务器之间的连接正在过早断开。

问题是主php.ini文件中的opcache.fast_shutdown = 1。默认情况下,此指令是禁用的,但是似乎有些服务器管理员认为这里可以提高性能。在我所有的测试中,我从未注意到使用此设置会带来积极的影响。以我的经验,它实际上使某些脚本执行得更慢,并且有一个糟糕的记录,有时脚本仍在执行时会进入关闭状态,甚至在Web服务器仍从缓冲区读取时甚至在执行结束时也会进入关闭状态。有2013年的旧错误报告,截至2017年2月尚未解决,可能与以下内容有关:https : //github.com/zendtech/ZendOptimizerPlus/issues/146

我已经看到由于此ERR_INCOMPLETE_CHUNKED_ENCODING ERR_SPDY_PROTOCOL_ERROR而出现以下错误:有时记录了相关的段错误;有时不是。

如果您遇到任何一种,请检查您的phpinfo,并确保已禁用opcache.fast_shutdown。


1

很抱歉,我没有确切的答案。但是我也确实遇到了这个问题,至少就我而言,找到了解决方法。因此,它可能会为其他更了解Php的人提供一些线索。

场景是,我有一个数组传递给函数。通过将该数组的所有内容放置在稍后打印的全局变量中,该数组的内容用于生成HTML字符串以发送回浏览器。(这个函数实际上并没有返回任何东西。草率,我知道,但是这很重要。)在这个数组中,除其他外,还有几个元素,这些元素通过引用承载了在该函数之外定义的嵌套关联数组。 。通过消除过程,我发现对该函数内该数组内任何元素的引用(或不引用)进行操作(包括尝试取消设置那些引用的元素),都会导致Chrome抛出net :: ERR_INCOMPLETE_CHUNKED_ENCODING错误,并且不显示任何内容。

首先,仅通过重新设计脚本以不将引用应用于数组元素,事情才重新开始正常工作。我怀疑这实际上是一个Php错误,它与所引用的元素是否会抛出内容长度标头有关,但是我对此确实不够了解。


我对该错误消息也有类似的经验,但是我发现我的代码中存在一个错误,可能应该触发了内存不足错误,尽管我可能没有在递归中使用任何额外的内存。无论如何,我认为PHP会安静地死掉而不会刷新输出缓冲区,也不会产生任何PHP错误。
斧头斧

1

我在Chrome和Firefox中的网站遇到此问题。如果我关闭了Avast Web Shield,它就会消失。通过向我的htaccess文件中添加一些html5样板htaccess,我似乎已经设法使其与Web Shield一起运行:

# ------------------------------------------------------------------------------
# | Expires headers (for better cache control)                                 |
# ------------------------------------------------------------------------------

# The following expires headers are set pretty far in the future. If you don't
# control versioning with filename-based cache busting, consider lowering the
# cache time for resources like CSS and JS to something like 1 week.

<IfModule mod_expires.c>

    ExpiresActive on
    ExpiresDefault                                      "access plus 1 month"

  # CSS
    ExpiresByType text/css                              "access plus 1 week"

  # Data interchange
    ExpiresByType application/json                      "access plus 0 seconds"
    ExpiresByType application/xml                       "access plus 0 seconds"
    ExpiresByType text/xml                              "access plus 0 seconds"

  # Favicon (cannot be renamed!)
    ExpiresByType image/x-icon                          "access plus 1 week"

  # HTML components (HTCs)
    ExpiresByType text/x-component                      "access plus 1 month"

  # HTML
    ExpiresByType text/html                             "access plus 0 seconds"

  # JavaScript
    ExpiresByType application/javascript                "access plus 1 week"

  # Manifest files
    ExpiresByType application/x-web-app-manifest+json   "access plus 0 seconds"
    ExpiresByType text/cache-manifest                   "access plus 0 seconds"

  # Media
    ExpiresByType audio/ogg                             "access plus 1 month"
    ExpiresByType image/gif                             "access plus 1 month"
    ExpiresByType image/jpeg                            "access plus 1 month"
    ExpiresByType image/png                             "access plus 1 month"
    ExpiresByType video/mp4                             "access plus 1 month"
    ExpiresByType video/ogg                             "access plus 1 month"
    ExpiresByType video/webm                            "access plus 1 month"

  # Web feeds
    ExpiresByType application/atom+xml                  "access plus 1 hour"
    ExpiresByType application/rss+xml                   "access plus 1 hour"

  # Web fonts
    ExpiresByType application/font-woff                 "access plus 1 month"
    ExpiresByType application/vnd.ms-fontobject         "access plus 1 month"
    ExpiresByType application/x-font-ttf                "access plus 1 month"
    ExpiresByType font/opentype                         "access plus 1 month"
    ExpiresByType image/svg+xml                         "access plus 1 month"

</IfModule>

# ------------------------------------------------------------------------------
# | Compression                                                                |
# ------------------------------------------------------------------------------

<IfModule mod_deflate.c>

    # Force compression for mangled headers.
    # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
    <IfModule mod_setenvif.c>
        <IfModule mod_headers.c>
            SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
            RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
        </IfModule>
    </IfModule>

    # Compress all output labeled with one of the following MIME-types
    # (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
    #  and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines
    #  as `AddOutputFilterByType` is still in the core directives).
    <IfModule mod_filter.c>
        AddOutputFilterByType DEFLATE application/atom+xml \
                                      application/javascript \
                                      application/json \
                                      application/rss+xml \
                                      application/vnd.ms-fontobject \
                                      application/x-font-ttf \
                                      application/x-web-app-manifest+json \
                                      application/xhtml+xml \
                                      application/xml \
                                      font/opentype \
                                      image/svg+xml \
                                      image/x-icon \
                                      text/css \
                                      text/html \
                                      text/plain \
                                      text/x-component \
                                      text/xml
    </IfModule>

</IfModule>

# ------------------------------------------------------------------------------
# | Persistent connections                                                     |
# ------------------------------------------------------------------------------

# Allow multiple requests to be sent over the same TCP connection:
# http://httpd.apache.org/docs/current/en/mod/core.html#keepalive.

# Enable if you serve a lot of static content but, be aware of the
# possible disadvantages!

 <IfModule mod_headers.c>
    Header set Connection Keep-Alive
 </IfModule>

1

我的解决方法是:

<?php  ob_start(); ?>
<!DOCTYPE html>
<html lang="de">
.....
....//your whole code
....
</html>
<?php
        ob_clean();
ob_end_flush();

ob_flush();

?>

希望这会在将来对某人有所帮助,在我的情况下,这是卡巴斯基的问题,但以上修复效果很好:)


1

就我而言,这是在Web API返回有效载荷的json序列化期间发生的-在我的Entity Framework模型中有一个“循环”引用,我在返回一个简单的一对多对象图,但是该子对象有一个返回父,显然json序列化器不喜欢。删除引用父项的子项上的属性可以解决问题。

希望这对可能遇到类似问题的人有所帮助。



1

我得到了net::ERR_INCOMPLETE_CHUNKED_ENCODING,在仔细检查服务器错误日志后,我发现这是由于PHP脚本执行超时所致。

在PHP脚本之上添加以下行为我解决了这一问题:

ini_set('max_execution_time', 300); //300 seconds = 5 minutes

参考:致命错误:超过30秒的最大执行时间


1

对我来说,这是由于硬盘驱动器上的可用空间不足所致。


1

对于我来说,这是完全不同的原因。net :: ERR_INCOMPLETE_CHUNKED_ENCODING 200,当我检查页面并转到newtork选项卡时,我看到vendor.js页面无法加载。经过检查,似乎js文件的大小很大〜6.5 mb。那就是当我意识到我需要压缩js时。我检查了我是否在使用ng build命令进行构建。相反,当我使用ng build --prod --aot --vendor-chunk --common-chunk --delete-output-path --buildOptimizer它为我工作时。请参阅https://github.com/angular/angular-cli/issues/9016


0

好。不久前我也遇到了这个问题。最后,我得到了真正解决此问题的解决方案。

我的问题症状还在于页面未加载,并且发现json数据被随机截断。

以下是我总结可以帮助解决此问题的解决方案

1.Kill the anti-virus software process
2.Close chrome's Prerendering Instant pages feature
3.Try to close all the apps in your browser
4.Try to define your Content-Length header
  <?php
     header('Content-length: ' . strlen($output));
  ?>
5.Check your nginx fastcgi buffer is right 
6.Check your nginx gzip is open

0

如果有任何循环或项目不存在,则您会遇到此问题。

在Chrome上运行该应用程序时,该页面为空白且无响应。

场景开始:

开发环境:MAC,STS 3.7.3,tc Pivotal Server 3.1,Spring MVC Web,

在$ {myObj.getfName()}中

场景结束:

问题原因:myObj上未定义getfName()函数。

希望对您有帮助。


0

我的猜测是服务器未正确处理分块的传输编码。它需要使用一个大块的终端将一个大块的文件终端化,以表明整个文件已被传输。因此下面的代码可能有效:

echo "\n";
flush();
ob_flush();
exit(0);

0

以我为例,它在服务器上的mysqlnd_ms php扩展名的配置已损坏。有趣的是,它在短时间内可以很好地处理请求。服务器错误日志中有一个警告,因此我们已对其进行快速修复。


0

这似乎是一个有多种原因和解决方案的常见问题,所以我将在此处为可能需要该解决方案的任何人提供解答。

我正在 net::ERR_INCOMPLETE_CHUNKED_ENCODING使用Chrome,osx,php70,httpd24组合,但是相同的代码在生产服务器上运行良好。

我最初跟踪常规日志,但没有真正显示出来。快速ls -later展示system.log了中最新的触摸文件/var/log,拖尾给了我

Saved crash report for httpd[99969] version 2.4.16 (805) 
to /Library/Logs/DiagnosticReports/httpd.crash

包含在:

Process:               httpd [99974]
Path:                  /usr/sbin/httpd
Identifier:            httpd
Version:               2.4.16 (805)
Code Type:             X86-64 (Native)
Parent Process:        httpd [99245]
Responsible:           httpd [99974]
User ID:               70

PlugIn Path:             /usr/local/opt/php70-mongodb/mongodb.so
PlugIn Identifier:       mongodb.so

一个brew uninstall php70-mongodb又一个httpd -k restart以后,一切都顺利进行。


0

就我而言,这是html的问题。json响应中存在'\ n'导致此问题。所以我删除了。


0

令人着迷的是,看到这个问题有多少不同的原因!

许多人说这是Chrome的问题,所以我尝试了Safari并仍然遇到问题。然后尝试了该线程中的所有解决方案,包括关闭我的AVG Realtime Protection,好运。

对我来说,问题是我的.htaccess档案。它包含的全部是FallbackResource index.php,但是当我将其重命名为时htaccess.txt,我的问题已解决。


1
什么... 我有同样的事情...但是,如果将其重命名为htaccess.txt,难道它不再有效吗?

恰恰。一个更好的问题可能是,为什么index.php处理错误?为什么会导致这种情况?
musicin3d

0

嗯,我偶然发现了一个类似的问题,但背后有不同的原因...

我在Laravel Mix的香草PHP项目上使用Laravel Valet。当我在Chrome中打开网站时,它抛出了错误。(如果我的网站加载了HTTPS协议,则错误更改为net::ERR_INCOMPLETE_CHUNKED_ENCODINGnet::ERR_SPDY_PROTOCOL_ERROR。)

我检查了php.iniopcache但未启用。我发现在我的情况下,问题与资产文件的版本控制有关–出于某种原因,它似乎不喜欢资产URL中的查询字符串(嗯,奇怪的是,特别是一个?)。

我已经删除mix.version()了本地环境,并且该网站在HTTP和HTTPS协议上的Chrome浏览器中都可以正常加载。


0

在Drupal 8(Symfony框架)中的Controller上下文中,此解决方案对我有用:

$response = new Response($form_markup, 200, array(
  'Cache-Control' => 'no-cache',
));

$content = $response->getContent();
$contentLength = strlen($content);
$response->headers->set('Content-Length', $contentLength);

return $response;

否则,响应标头“ Transfer-Encoding”具有值“ chunked”。这可能是Chrome浏览器出现的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.