it-swarm.com.ru

Chrome net :: ERR_INCOMPLETE_CHUNKED_ENCODING ошибка

В течение последних двух месяцев я получал следующую ошибку на консоли разработчика Chrome:

net::ERR_INCOMPLETE_CHUNKED_ENCODING

Симптомы:

  • Страницы не загружаются.
  • Усеченные файлы CSS и JS.
  • Страницы висят.

Серверная среда:

  • Apache 2.2.22
  • PHP
  • Ubuntu

Это происходит со мной на нашем собственном сервере Apache. Это не происходит ни с кем другим - т. Е. Ни один из наших пользователей не сталкивается с этой проблемой - ни кто-либо еще в нашей команде разработчиков.

Другие люди получают доступ к тому же серверу с точно такой же версией Chrome. Я также попытался отключить все расширения и просмотр в режиме инкогнито - безрезультатно.

Я использовал Firefox, и происходит то же самое. Усеченные файлы и еще много чего. Единственное, что Firefox не вызывает никаких ошибок консоли, поэтому вам нужно проверить HTTP-запрос через Firebug, чтобы увидеть проблему.

Заголовки ответа от 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

Во время тестирования я смог решить проблему, применив HTTP 1.0 в моем файле htaccess:

SetEnv downgrade-1.0

Это избавляет от проблемы. Однако принудительное использование HTTP 1.0 вместо HTTP 1.1 не является правильным решением.

Обновление: так как я столкнулся с этой проблемой только один раз, я решил, что мне нужно потратить больше времени на выяснение того, было ли это проблемой на стороне клиента. Если я зайду в настройки Chrome и воспользуюсь опцией «Восстановить по умолчанию», проблема исчезнет на 10-20 минут. Тогда это возвращается.

94
Wayne Whitty

ХОРОШО. Я трижды проверил это, и я уверен на 100%, что это вызвано моим антивирусом (ESET NOD32 ANTIVIRUS 5). 

Всякий раз, когда я отключаю защиту в реальном времени, проблема исчезает. Сегодня я отключил защиту в реальном времени на 6-7 часов, и проблема никогда не возникала.

Несколько мгновений назад я снова включил его, только чтобы проблема всплыла в течение минуты.

В течение последних 24 часов я включал и выключал защиту в реальном времени, чтобы быть уверенным. Каждый раз - результат был одинаковым.

Обновление: я столкнулся с другим разработчиком, у которого была точно такая же проблема с защитой в реальном времени на его антивирусе Касперского. Он отключил это, и проблема ушла. Т.е. эта проблема, похоже, не ограничивается ESET.

64
Wayne Whitty

Ошибка пытается сказать, что 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).

UPDATE: Мне удалось воспроизвести эту ошибку (наконец-то), когда возникла фатальная ошибка, когда PHP (на том же локальном хосте) была буферизация вывода . Я предполагаю, что вывод был слишком плохо искажен, чтобы быть полезным (заголовки, но мало или нет контента).

В частности, мой код рекурсивно вызывал себя случайно, пока PHP, по праву, не сдался. Таким образом, сервер не отправил порцию терминала длиной 0 - что было проблемой, которую я идентифицировал ранее.

33
Matthew Brown aka Lord Matt

У меня была эта проблема. Отследил это после того, как попробовал большинство других ответов на этот вопрос. Это было вызвано тем, что владелец и права доступа к каталогу /var/lib/nginx и, более конкретно, к каталогу /var/lib/nginx/tmp неверны. 

Каталог tmp используется fast-cgi для кэширования ответов по мере их генерирования, но только если они превышают определенный размер. Таким образом, проблема является периодической и возникает только тогда, когда сгенерированный ответ является большим. 

Проверьте nginx <Host_name>.error_log, чтобы увидеть, есть ли у вас проблемы с разрешениями.

Чтобы исправить, убедитесь, что владельцем и группой /var/lib/nginx и всех подкаталогов является nginx.

26
SimonAlfie

Следующее должно исправить это для каждого клиента.

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

О боже, у меня была такая же проблема 5 минут назад. Я потратил несколько часов, чтобы найти решение. На первый взгляд отключение антивируса решило проблему на Windows. Но затем я заметил проблему на другом компьютере с Linux без антивируса. Нет ошибок в логах nginx. Моя uwsgi показала что-то про "Сломанная труба", но не по всем запросам . Знаете что? На устройстве не осталось свободного места, которое я обнаружил при перезапуске сервера в журнале базы данных, и df одобрил это. Единственное объяснение того, почему антивирус был решен, заключается в том, что он предотвращает кэширование браузера (он должен проверять каждый запрос), но браузер с некоторым странным поведением может просто игнорировать неверный ответ и отображать кэшированные ответы.

6
user3479125

Это известная проблема Chrome. По мнению Chrome и Chromium, для этого нет универсального решения. Эта проблема не связана с типом и версией сервера, она прямо в Chrome.

Установка заголовка Content-Encoding в identity решила эту проблему для меня.

от developer.mozilla.org

личность | Указывает функцию идентичности (то есть без сжатия или модификации .__).

Итак, я могу предположить, что в некоторых случаях Chrome не может правильно выполнить сжатие gzip.

4
Mikhail Neofitov

В моем случае у меня была функция /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
3
Pedro Casado

Это происходило на двух разных клиентских серверах, разделенных несколькими годами, с использованием того же кода, который был развернут на сотнях других серверов за это время без проблем.

Для этих клиентов это происходило в основном на PHP сценариях с потоковой передачей HTML - то есть страницах «Соединение: закрыть», где выходные данные отправлялись в браузер по мере того, как выходные данные становились доступными.

Оказалось, что соединение между процессом PHP и веб-сервером преждевременно обрывалось до завершения сценария и задолго до истечения времени ожидания.

Проблема была в opcache.fast_shutdown = 1 в основном файле php.ini. Эта директива по умолчанию отключена, но некоторые администраторы сервера считают, что здесь нужно повысить производительность. Во всех моих тестах я никогда не замечал положительной разницы при использовании этого параметра. По моему опыту, это привело к тому, что некоторые сценарии выполнялись на самом деле медленнее, и у них ужасный послужной список, когда он иногда завершал работу во время выполнения сценария или даже в конце выполнения, когда веб-сервер все еще считывал данные из буфера. Существует старый отчет об ошибках 2013 года, который по состоянию на февраль 2017 года не решен и может быть связан с: https://github.com/zendtech/ZendOptimizerPlus/issues/146

Я видел следующие ошибки, возникающие из-за этого ERR_INCOMPLETE_CHUNKED_ENCODING ERR_SPDY_PROTOCOL_ERROR Иногда регистрируются соответствующие корреляционные ошибки; иногда нет.

Если вы столкнулись с одним из них, проверьте ваш phpinfo и убедитесь, что opcache.fast_shutdown отключен.

2
Ted Phillips

Здесь проблема была в моем Avast AV . Как только я отключил его, проблема исчезла. 

Но я действительно хотел бы понять причину такого поведения. 

2
aemerich

В моем случае это происходило во время сериализации json полезной нагрузки возврата веб-API - у меня была «круговая» ссылка в моей модели Entity Framework, я возвращал простой объектный граф «один ко многим» назад, но у ребенка была ссылка на родитель, который явно не нравится сериализатору json. Удаление свойства на ребенке, который ссылался на родителя, добилось цели.

Надеюсь, это поможет кому-то, у кого может быть похожая проблема.

1
buzzripper

У меня была эта проблема с сайтом в Chrome и Firefox. Если я выключил Avast Web Shield, он исчез. Кажется, мне удалось заставить его работать с запущенным Web Shield, добавив часть htccess html5 в мой файл htaccess:

# ------------------------------------------------------------------------------
# | 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
Wolfgang

Я просто смотрел с похожей проблемой. И заметил, что это происходит только тогда, когда страница содержит символы UTF-8 с порядковым значением больше 255 (т.е. многобайтовым).

Проблема заключалась в том, как вычислялся заголовок Content-Length. Базовым бэкэндом была вычисленная длина символа, а не длина в байтах. Отключение заголовков длины содержимого временно решало проблему, пока я не смог исправить систему шаблонов внутреннего интерфейса.

1
Troy Morehouse

Извините, у меня нет точного ответа для вас. Но я тоже столкнулся с этой проблемой и, по крайней мере, в моем случае, нашел способ обойти ее. Так что, возможно, он даст некоторые подсказки кому-то еще, кто знает больше о Php под капотом.

Сценарий, у меня есть массив, переданный в функцию. Содержимое этого массива используется для создания строки HTML, которая будет отправлена ​​обратно в браузер, путем помещения всего этого в глобальную переменную, которая будет напечатана позже. (Эта функция на самом деле ничего не возвращает. Небрежно, я знаю, но это не относится к делу.) Внутри этого массива, помимо прочего, есть пара элементов, несущих, посредством ссылки, вложенные ассоциативные массивы, которые были определены вне этой функции. , Посредством процесса исключения я обнаружил, что манипулирование любым элементом внутри этого массива в этой функции, на которую ссылаются или нет, включая попытку сброса этих ссылочных элементов, приводит к тому, что Chrome выдает ошибку net :: ERR_INCOMPLETE_CHUNKED_ENCODING и не отображает содержимое. И это несмотря на то, что строка HTML в глобальной переменной - это именно то, что и должно быть.

Только после повторного использования скрипта, чтобы не применять ссылки к элементам массива, все снова начало работать нормально. Я подозреваю, что это на самом деле ошибка Php, связанная с наличием ссылочных элементов, отбрасывающих заголовки длины содержимого, но я действительно не знаю достаточно об этом, чтобы сказать наверняка.

1
Claymore

Я просто хотел поделиться с вами своим опытом, если у кого-то может быть такая же проблема сMOODLE

Наша платформа Moodle внезапно стала работать очень медленно, загрузка панели управления заняла примерно в 2-3 раза больше времени (до 6 секунд), чем обычно, и время от времени некоторые страницы вообще не загружались (не ошибка 404, а пустая страница). ). В консоли инструментов разработчика была видна следующая ошибка: net::ERR_INCOMPLETE_CHUNKED_ENCODING. 

При поиске этой ошибки, похоже, проблема в Chrome, но у нас была проблема с различными браузерами. После нескольких часов исследований и сравнения баз данных за несколько дней до того, как я наконец обнаружил проблему, кто-то включил Мониторинг событий. Однако в журнале «Конфиг изменения» это изменение не было видно! Выключив Мониторинг событий, мы наконец решили проблему - у нас не было определенных правил для мониторинга событий. 

Мы запускаем Moodle 3.1.2+ с MariaDB и PHP 5.4.

1
joelschmid

Мое исправление:

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

ob_flush();

?>

Надеюсь, что это поможет кому-то в будущем, и в моем случае это проблема Касперского, но исправление выше прекрасно работает :) 

1
Web Developer

Это похоже на общую проблему с несколькими причинами и решениями, поэтому я собираюсь разместить свой ответ здесь для тех, кто может потребовать это.

Я получал 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
darryn.ten

Проверьте разрешение папки nginx и установите для этого разрешение appache:

chown -R www-data:www-data /var/lib/nginx
0
Mehdi Zamani

Хм, я просто наткнулся на похожую проблему, но по другим причинам ... 

Я использую Laravel Valet в проекте Vanilla PHP с Laravel Mix . Когда я открывал сайт в Chrome, он выдавал ошибки net::ERR_INCOMPLETE_CHUNKED_ENCODING. (Если сайт загружен по протоколу HTTPS, ошибка изменилась на net::ERR_SPDY_PROTOCOL_ERROR.)

Я проверил php.ini и opcache не был включен. Я обнаружил, что в моем случае проблема была связана с управлением версиями файлов ресурсов - по какой-то причине она не выглядела как строка запроса в URL-адресе ресурсов (ну, как ни странно, только один из них?). 

Я удалил mix.version() для локальной среды, и сайт отлично загружается в моем Chrome по протоколам HTTP и HTTPS. 

0
Barnabas Kecskes

У меня была эта проблема (показывающая ERR_INCOMPLETE_CHUNKED_ENCODING в Chrome, ничего в других браузерах). Выяснилось, что проблема заключалась в том, что мой хостинг-провайдер GoDaddy добавил скрипт мониторинга в конце моего вывода. 

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

0
cheshirec7

Если есть какой-либо цикл или элемент, который не существует, то вы сталкиваетесь с этой проблемой.

При запуске приложения в Chrome страница становится пустой и перестает отвечать на запросы.

Начало сценария:

Среда разработки: MAC, STS 3.7.3, tc Pivotal Server 3.1, Spring MVC Web,

в $ {myObj.getfName ()} 

Конец сценария:

Причина проблемы: функция getfName () не определена в myObj.

Надеюсь, это поможет вам.

0
ArunDhwaj IIITH

В контексте Контроллера в Drupal 8 (Symfony Framework) это решение работало для меня:

$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
Hermann Schwarz

Захватывающе видеть, сколько различных причин есть для этой проблемы! 

Многие говорят, что это проблема Chrome, поэтому я попробовал Safari, но проблемы остались. Затем попробовал все решения в этой теме, включая отключение моей AVG Realtime Protection, не повезло.

Для меня проблема заключалась в моем файле .htaccess. Все, что он содержал, было FallbackResource index.php, но когда я переименовал его в htaccess.txt, моя проблема была решена.

0
kregus

В моем случае это был вопрос HTML. В ответе json было '\ n', что вызвало проблему. Так что я убрал это.

0
Bunty

Что ж. Не так давно я тоже встречал этот вопрос. И наконец я получаю решения, которые действительно решают эту проблему.

Симптомами моей проблемы также являются страницы, которые не загружаются, и обнаруживается, что данные 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
yangzj1992

В моем случае это был неверный конфиг для расширения php mysqlnd_ms на сервере. Самое смешное, что он работал нормально по коротким запросам. В журнале ошибок сервера появилось предупреждение, поэтому мы быстро его исправили. 

0
Tomasz Swider

Обычно это происходит, когда клиент отправляет пакет запросов на сервер рядом с событием на стороне клиента. 

Как правило, это признак «плохого» программирования на стороне клиента.

Представьте, что я обновляю все строки таблицы. 

Плохой способ - отправить запрос на обновление каждой строки (много запросов в rafale без ожидания завершения запроса). Чтобы исправить это, убедитесь, что запрос завершен, перед отправкой другого.

Хороший способ - отправить запрос со всеми обновленными строками. (один запрос)

Итак, сначала посмотрим, что происходит на стороне клиента, и, если необходимо, проведем рефакторинг кода.

Используйте wireshark, чтобы определить, что не так в запросах. 

0
sancelot

я предполагаю, что сервер неправильно обрабатывает фрагментированную кодировку передачи. Он должен соединять фрагментированные файлы с терминальным фрагментом, чтобы указать, что весь файл был передан. Так что код ниже может работать:

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

Я получал net::ERR_INCOMPLETE_CHUNKED_ENCODING, при ближайшем рассмотрении ошибок сервера я обнаружил, что это произошло из-за тайм-аута выполнения скрипта PHP.

Добавление этой строки поверх скрипта PHP решило это для меня:

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

Ссылка: Неустранимая ошибка: превышено максимальное время выполнения 30 секунд

0
bhu1st