PhpBB3 ist nun schon eine Weile veröffentlicht – und so stellt man das eine oder andere Forum um. Probeläufe werden gemacht, ob eine phpBB2 nach phpBB3 Migration klappt, alle Userdaten und Avatare mitkommen.

Nachdem dann auch das Avatar-Salt richtig gesetzt ist, sieht erstmal alles gut aus. Bis die ersten User des phpBB3 Forum klagen, dass „die Seite langsam“ ist. Auch mir selber kamen längere Ladezeiten unter.

Manchmal dauerte es 15 Sekunden bis ein Avatar Bild geladen war – der Rest des phpBB Forums war schnell wie erwartet.

Des Rätsels Lösung fand sich dann dank Stefan:

Nur bei HTTP 1.1 Requests und aktiviertem Keepalive bzw. HTTP Pipelining und nur bei Bildern trat das Problem auf. Schnell war identifiziert, dass die 15 Sekunden genau der maximalen Keepalive Zeit des Apache entsprachen.

Was war nun passiert: Im Apache ist mod_gzip (bzw. DEFLATE) aktiviert. Die Avatare werden von einem PHP Script ausgeliefert und nicht mehr direkt verlinkt. Dabei wird von dem Script auch der Content-Length Header gesetzt – auf die Größe der Bilddatei.

Dann braust das mod_gzip einmal über das Bild und macht es kleiner – und sei es nur ein kleines Byte. Der Content-Length Header wird nicht angepaßt, und der Browser glaubt er müsse noch auf fehlende Bytes warten. Das tut er dann, bis der Timeout erreicht ist.

Lösung dafür war dann diese Zeile in der Apache Config, zumindest als vorläufiger Workaround:

SetEnvIfNoCase Request_URI download/file\\.php$ no-gzip dont-vary