Question

J'ai écrit un serveur CSS qui fait le remplacement et l'analyse de minimisation de base / var. Le serveur utilise Node.js.

Je suis désireux de gzip ma réponse de ce serveur. Comme dit dans l'IRC, Node.js ne dispose pas de lib gzip, donc je vais tenter de le faire manuellement à partir de la ligne de commande (comme je ne fais que gzipping lorsqu'ils ne sont pas dans le cache).

Je poussais les données de fichier vers un fichier temporaire, puis en utilisant exec pour appeler 'gzip -c -9 -q ' + tempFile. Je reçois les données compressées lues correctement (il semble), et envoie l'en-tête de Content-Encoding appropriée comme 'gzip', mais les rapports Chrome:

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

En outre, certains testeurs gzip indépendants ne en ligne aussi bien (et pas seulement Chrome).

Je suppose que c'est quelque chose de simple, je ne sais pas générer des blocs de gzip pour les navigateurs, car je ne l'ai jamais essayé de le faire manuellement.

Toute aide serait utile. Le serveur est ultra-rapide, mais je dois gzip le contenu pour obtenir les meilleures performances pour les utilisateurs finaux.

Merci.

UPDATE J'ai vérifié mon Content-Length est correcte

Était-ce utile?

La solution

Avez-vous mis à jour le Content-Length pour correspondre à la taille gzip? Il semble que cela pourrait bousiller le décodage.

Autres conseils

Le noeud est bord saigne encore et ne semble pas encore avoir une bonne gestion des données binaires.

des encodages de chaîne de nœud sont ascii, binaire et UTF8. [...] "binaire" seulement regarder [s] à premiers 8 bits de la 16bit JavaScript caractères chaîne. Le problème est que les chaînes selon ECMA sont des chaînes de caractères 16bit. Si vous utilisez UTF-8 (c'est la valeur par défaut), il y a une certaine normalisation lors de la lecture dans la chaîne, et ce corrompt gzip. Si vous utilisez ascii, il est évident qu'elle ne fonctionnera pas.

Il ne fonctionnera que si vous utilisez codage binaire à la fois la lecture et l'écriture . Les 8 bits supérieurs d'un caractère de chaîne Javascript juste ne sont pas utilisés. Sinon, essayez d'envoyer les fichiers directement au client sans chargement dans les chaînes Javascript, peut-être avec l'aide d'un serveur proxy devant nœud.

Je me espère que le moteur V8 de Google implémente un type véritable chaîne binaire, quelque chose comme cette proposition http://groups.google.com/group/nodejs/browse_thread/thread/648a0f5ed2c95211/ef89acfe538931a1?lnk=gst&q=binary+type#ef89acfe538931a1

CommonJS propose également binaire / B et depuis nœud essaie de suivre CommonJS, il y a peu d'espoir pour l'avenir.

Modifier Je viens de découvrir branche net2 de noeud qui contient un tampon binaire (voir src / node_buffer.h). Il fait partie d'une refonte complète du réseau, il semble.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top