Chrome net :: ERR_INCOMPLETE_CHUNKED_ENCODING错误

问题描述 投票:99回答:28

在过去两个月中,我在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.1强制HTTP 1.0不是一个合适的解决方案。

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

php apache google-chrome chunked-encoding chunked
28个回答
68
投票

好。我对此进行了三次测试,我100%确定它是由我的反病毒引起的(ESET NOD32 ANTIVIRUS 5)。

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

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

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

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


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错误并且不显示任何内容。尽管事实上全局变量中的HTML字符串正是应该的样子。

只有通过重新设计脚本以不首先应用对数组元素的引用,才能使事情再次正常工作。我怀疑这实际上是一个Php bug,它与引用元素的存在有关,抛弃了内容长度的标题,但我真的不知道这个肯定会说。


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
投票

我只是想与你分享我的经验,如果有人可能与MOODLE有同样的问题。

我们的moodle平台突然非常缓慢,仪表板加载时间长达2-3倍(最多6秒),然后常常有些页面根本没有加载(不是404错误,而是空白页面) )。在Developer Tools Console中,可以看到以下错误:net::ERR_INCOMPLETE_CHUNKED_ENCODING.

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

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


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
投票

最简单的解决方案是将您的set proxy位置的proxy_read_timeout增加到nginx.conf中的更高值(比如120s)。

location / {
....
proxy_read_timeout 120s
....
}

我在这里找到了这个解决方案https://rijulaggarwal.wordpress.com/2018/01/10/atmosphere-long-polling-on-nginx-chunked-encoding-error/


1
投票

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


1
投票

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

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

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

参考:Fatal error: Maximum execution time of 30 seconds exceeded


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

38
投票

该错误试图说明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上)是output buffering时,我能够复制此错误(最后)。我认为输出被严重损坏而没有多大用处(标题但很少或没有内容)。

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


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
投票

这似乎是多种原因和解决方案的常见问题,因此我将在这里为任何可能需要它的人提供我的答案。

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

我最初将常规日志记录下来,但没有真正显示出来。一个快速的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实时保护,没有运气。

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


0
投票

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

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

我检查了php.ini并没有启用opcache。我发现在我的情况下,问题与版本化资产文件有关 - 出于某种原因,它似乎不喜欢资产的URL中的查询字符串(好吧,奇怪的是,只有一个特别?)。

我已针对本地环境删除了mix.version(),并且该网站在我的Chrome上加载了HTTP和HTTPS协议。


0
投票

在Drupal 8(Symfony Framework)中的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浏览器的问题。


0
投票

我遇到了这个问题(在Chrome中显示ERR_INCOMPLETE_CHUNKED_ENCODING,在其他浏览器中没有显示)。原来问题是我的托管服务提供商GoDaddy在我的输出结束时添加了一个监控脚本。

https://www.godaddy.com/community/cPanel-Hosting/how-to-remove-additional-quot-monitoring-quot-script-added/td-p/62592


0
投票

检查nginx文件夹权限并为其设置apache权限:

chown -R www-data:www-data /var/lib/nginx

28
投票

我有这个问题。在尝试了这个问题上的大多数其他答案之后追踪它。它是由/var/lib/nginx的所有者和权限引起的,更具体地说是/var/lib/nginx/tmp目录不正确。

fast-cgi使用tmp目录在生成响应时缓存响应,但前提是它们超过特定大小。因此问题是间歇性的,只有在生成的响应很大时才会发生。

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

要修复,请确保/var/lib/nginx和所有子目录的所有者和组是nginx。


-1
投票

当客户端在客户端事件旁边向服务器发送一连串请求时,这通常会引发。

这通常是客户端“糟糕”编程的标志。

想象一下,我正在更新表格的所有行。

糟糕的方法是发送更新每一行的请求(rafale中的许多请求,而不等待请求完成)。要更正它,请确保请求已完成,然后再发送另一个请求。

好方法是发送包含所有更新行的请求。 (一个要求)

因此,首先,看看客户端发生了什么,并在必要时重构代码。

使用wireshark来识别请求中出错的地方。


17
投票

以下内容应该为每个客户端修复它。

//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

9
投票

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


4
投票

在我的情况下,我有/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 bug追踪器,没有通用的解决方案。此问题与服务器类型和版本无关,它在Chrome中是正确的。

Content-Encoding标题设置为identity解决了这个问题。

来自developer.mozilla.org

身份|表示身份功能(即没有压缩,也没有修改)。

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


2
投票

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

但是,我真的想了解这种行为的原因。


2
投票

我刚开始遇到类似的问题。并且注意到仅当页面包含序数值大于255(即多字节)的UTF-8字符时才会发生这种情况。

最终出现问题的是如何计算Content-Length标头。底层后端是计算字符长度,而不是字节长度。关闭内容长度标题会暂时解决问题,直到我可以修复后端模板系统。

© www.soinside.com 2019 - 2024. All rights reserved.