Firefox v33 und der Dateidownload

Über Softwareupdates mag man geteilter Meinung sein, um aber auch in Zukunft sicher unterwegs zu sein sind Updates unabdingbar. Ganz besonders trifft dies auf Aktualisierungen von Webbrowsern zu. Bei Mozilla war es am 24. Oktober wieder soweit und der Firefox geht inzwischen in die 33. Runde. Ich könnte jetzt auf die Neuerungen wie den OpenH264 Support eingehen, oder mich wieder über die fehlende 64Bit Unterstützung unter Windows wundern. Stattdessen gehe ich auf ein Problem ein, welches mich nach dem neusten Update zum Grübeln gebracht hat.

Mit der Veröffentlichung von Firefox 33 erhielt ich mehrere Meldungen über nicht funktionierende Downloads auf einen meiner Portale. Bemerkbar machte sich dieses Problem durch ein Abbruch des Downloads im Firefox. Noch bevor der Benutzer überhaupt den Download bestätigen konnte, brach der Browser den angefragten Dateitransfer mit einer nichtssagenden Fehlermeldung ab.

Um solche Fehler möglichst frühzeitig zu entdecken und mit den neusten Browser-Codes ausgestattet zu sein, setze ich für Firefox schon seit einiger Zeit auf den Aurora Channel – eine von Mozilla geschaffene Testversion für Entwickler. Im Gegensatz zur offiziellen Beta-Version wird Aurora täglich aus dem Quellcode generiert, enthält aber nicht zu experimentellen Code und ist damit in der Regel stabiler als das Nightly Build.

Aurora Browser

Aurora ist die Firefox Entwicklerversion und wird täglich aus dem Quelltext generiert

In diesem Fall ist mir der Fehler jedoch leider durch die Lappen gegangen und fiel natürlich sofort zum Releasetag von Firefox 33 auf. Eine kurze Googlesuche brachte mich glücklicherweise schnell zu einer vorübergehenden Lösung inklusive Link zum Bugtracker. Hätte ich den Mozilla Bugtracker ohne Google durchsucht, ich wäre vermutlich immer noch damit beschäftigt.

Neu in Firefox 33 ist unter Anderen eine kleine Kontrolle der Downloads. Sobald die angefragte Datei kleiner ist als der über den Server Header (Content-Length) übermittelte Wert, behandelt der Firefox die Datei als korrupt und bricht den Dateidownload mit einer Fehlermeldung ab. Die Implementierung einer solchen Abfrage ist durchaus sinnvoll und auf langer Sicht erwarte ich dass Chrome und Internet Explorer in dieser Hinsicht nachziehen werden. Doch hätte für den Anfang nicht ein Warnhinweis genügt ohne gleich den Download komplett abzubrechen?

Kurzfristig hätte es jedenfalls gereicht den entsprechenden Header-Eintrag zu löschen, nur wäre der Benutzer dann im unklaren über die Dateigröße eines Downloads – eine unbefriedigende Lösung. Eine Analyse der Response Parameter brachte mich dann zum Ziel. Die Website wird vollständig mittels gzip/deflat komprimiert an den Benutzer ausgeliefert. Folglich betrifft die Kompression auch einen Dateidownload wenn er über den Code initiiert wird.

Logischerweise ist eine komprimierte Datei in der Regel kleiner als das Original. Die Dateigröße wird aber in diesem Beispiel über die Datei direkt ermittelt. Um weitere Fehlerquellen zu vermeiden wurde daher die Kompression für Dateidownloads deaktiviert. Im Beispiel oben bedeutet dies dass Zeile 1 gelöscht wird.

Meine Lehre aus dieser Geschichte wird es sein, zukünftig genauer mit Aurora einen Blick auf die Codes zu werfen. Vielleicht finde ich bald die Zeit, automatisierte Tests für meine Browser zu schreiben. Nützlich wären sie in diesem Fall jedenfalls gewesen. Natürlich sollten schon im Code solche Fehler vermieden werden.