Frage

Ich habe einen CSS-Server geschrieben, die Minimierung tut und grundlegenden Parsing / var Ersatz. Der Server verwendet node.js.

Ich bin zu wollen meine Antwort von diesem Server auf gzip. Wie im IRC gesagt, node.js derzeit gzip lib nicht, so dass ich es bin versucht, über die Befehlszeile manuell zu tun (wie ich nur Gzipping, wenn sie nicht im Cache).

Ich schiebe die Dateidaten, um eine temporäre Datei und dann auf Anruf 'gzip -c -9 -q ' + tempFile mit exec. Ich erhalte die komprimierten Daten wieder richtig (wie es scheint), und den richtigen Content-Encoding Header als 'gzip' senden, aber Chrome Berichte:

Error 330 (net::ERR_CONTENT_DECODING_FAILED): Unknown error.

Auch einige unabhängigen gzip-Tester sowohl online als auch fehlschlagen (nicht nur Chrome).

Ich gehe davon aus das ist etwas einfach, weiß ich nicht über gzip Blöcke für Browser zu erzeugen, da ich noch nie versucht, manuell zu tun.

Jede mögliche Unterstützung hilfreich sein. Der Server ist extrem schnell, aber ich brauche den Inhalt gzip die beste Leistung für den Endverbraucher zu erhalten.

Danke.

UPDATE Ich habe überprüft mein Content-Length richtig ist

War es hilfreich?

Lösung

Haben Sie den Content-Length aktualisiert, um die gzip-Größe passen? Es scheint so, dass die Decodierung vermasseln könnte.

Andere Tipps

Knoten bluten noch Kante und scheinen noch nicht ein gutes Handling von binären Daten haben.

Knoten String Codierungen ascii sind, binäre und UTF-8. [...] "binäre" schaut nur [s] an den ersten 8 Bits der 16-Bit-JavaScript-String-Zeichen. Das Problem ist, dass Strings nach ECMA sind 16-Bit-Zeichenketten. Wenn Sie UTF-8 verwenden (es ist die Standardeinstellung), dass eine Normalisierung ist, wenn in den String zu lesen, und diese korrumpiert gzip. Wenn Sie ascii verwenden, ist es offensichtlich nicht funktioniert.

Es wird funktionieren, wenn Sie mit binäre Codierung beide Lesen und Schreiben . Die oberen 8 Bits eines Javascript-String Zeichen sind gerade nicht benutzt wird. Wenn nicht, versuchen Sie die Dateien direkt an den Client ohne Laden in Javascript-Strings zu schicken, vielleicht mit Hilfe eines Proxy-Servers vor Knoten.

ich hoffe, dass die Google-V8-Motor realisiert einen echter binärer String-Datentyp, so etwas wie dieser Vorschlag http://groups.google.com/group/nodejs/browse_thread/thread/648a0f5ed2c95211/ef89acfe538931a1?lnk=gst&q=binary+type#ef89acfe538931a1

Commonjs schlägt auch Binary / B und da Knoten versucht Commonjs, gibt es einige Hoffnung für die Zukunft zu folgen.

Bearbeiten ich

scroll top