Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING Fehler

In den letzten zwei Monaten habe ich den folgenden Fehler in der Entwicklerkonsole von Chrome erhalten:

net::ERR_INCOMPLETE_CHUNKED_ENCODING

Symptome:

  • Seiten werden nicht geladen.
  • Abgeschnittene CSS- und JS-Dateien.
  • Hängende Seiten.

Server-Umgebung:

  • Apache 2.2.22
  • PHP
  • Ubuntu

Das Problem tritt bei mir auf unserem internen Apache-Server auf. Es tritt bei niemandem sonst auf - d.h. keiner unserer Benutzer hat dieses Problem - und auch niemand aus unserem Entwicklungsteam.

Andere Benutzer greifen mit der gleichen Version von Chrome auf den gleichen Server zu. Ich habe auch versucht, alle Erweiterungen zu deaktivieren und im Inkognito-Modus zu surfen - ohne Erfolg.

Ich habe Firefox verwendet, und es tritt genau das Gleiche auf. Abgeschnittene Dateien und so weiter. Die einzige Sache ist, Firefox doesn't erhöhen keine Konsole Fehler, so müssen Sie die HTTP-Anfrage über Firebug zu inspizieren, um das Problem zu sehen.

Antwort-Header von 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

Beim Testen konnte ich das Problem beheben, indem ich HTTP 1.0 in meiner htaccess-Datei erzwang:

SetEnv downgrade-1.0

Damit ist das Problem behoben. Das Erzwingen von HTTP 1.0 anstelle von HTTP 1.1 ist jedoch keine angemessene Lösung.

Aktualisierung: Da ich der Einzige bin, bei dem dieses Problem auftritt, dachte ich mir, dass ich mehr Zeit damit verbringen muss, herauszufinden, ob es ein clientseitiges Problem ist oder nicht. Wenn ich die Einstellungen von Chrome aufrufe und die Option "Auf Standard zurücksetzen" verwende, verschwindet das Problem für etwa 10-20 Minuten. Dann kehrt es zurück.

Lösung

OK. Ich habe das dreifach getestet und bin mir 100% sicher, dass es von meinem Antivirusprogramm (ESET NOD32 ANTIVIRUS 5) verursacht wird.

Immer wenn ich den Echtzeitschutz deaktiviere, verschwindet das Problem. Heute habe ich den Echtzeitschutz für 6-7 Stunden ausgeschaltet und das Problem trat nicht auf.

Vor wenigen Augenblicken habe ich ihn wieder eingeschaltet, aber das Problem trat innerhalb einer Minute wieder auf.

Im Laufe der letzten 24 Stunden habe ich den Echtzeitschutz immer wieder ein- und ausgeschaltet, nur um sicherzugehen. Jedes Mal war das Ergebnis dasselbe.

Update: Ich bin auf einen anderen Entwickler gestoßen, der genau das gleiche Problem mit dem Echtzeitschutz auf seinem Kaspersky-Virenschutz hatte. Er deaktivierte ihn und das Problem verschwand. Das heißt, dieses Problem scheint nicht auf ESET beschränkt zu sein.

Kommentare (11)

Die Fehlermeldung besagt, dass Chrome während des Sendens der Seite unterbrochen wurde. Ihr Problem ist herauszufinden, warum.

Offenbar handelt es sich um ein bekanntes Problem, das einige Versionen von Chrome betrifft. Soweit ich das beurteilen kann, ist es ein Problem dieser Versionen, die sehr empfindlich auf die Länge des Inhalts und die ausgedrückte Größe des gesendeten Chunks reagieren (ich könnte damit weit daneben liegen). Kurz gesagt, ein leicht unvollkommenes Header-Problem.

Andererseits könnte es sein, dass der Server den terminalen Chunk mit der Länge 0 nicht sendet. Das könnte mit ob_flush(); behoben werden. Es ist auch möglich, dass Chrome (oder die Verbindung oder etwas anderes) langsam ist. Wenn also die Verbindung geschlossen wird, ist die Seite noch nicht geladen. Ich habe keine Ahnung, warum das passieren könnte.

Hier ist die Antwort des paranoiden Programmierers:

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

In Ihrem Fall könnte es sich um eine Zeitüberschreitung des Skripts handeln. Ich bin mir nicht sicher, warum es nur Sie betreffen sollte, aber es könnte an einer Reihe von Race Conditions liegen? Das ist eine reine Vermutung. Sie sollten in der Lage sein, dies zu testen, indem Sie die Ausführungszeit des Skripts verlängern.

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

Es kann auch sein, dass Sie einfach Ihre Chrome-Installation aktualisieren müssen (da dieses Problem Chrome-spezifisch ist).

UPDATE: Ich konnte diesen Fehler (endlich) replizieren, als ein schwerwiegender Fehler auftrat, während PHP (auf demselben Localhost) Ausgabepufferung durchführte. Ich vermute, dass die Ausgabe zu sehr verstümmelt war, um von großem Nutzen zu sein (Kopfzeilen, aber wenig oder kein Inhalt).

Insbesondere hatte ich versehentlich meinen Code, der sich selbst rekursiv aufrief, bis PHP - zu Recht - aufgab. Daher sendete der Server nicht den terminalen Chunk mit der Länge 0 - was das Problem war, das ich zuvor identifiziert hatte.

Kommentare (3)

Die folgende Lösung sollte für jeden Kunden funktionieren.

<?php

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

Aber in meinem Fall war das Folgende eine bessere Option und hat das Problem auch gelöst:

.htaccess:

php_value opcache.enable 0
Kommentare (4)