Pregunta

He escrito un servidor CSS que realiza minimización y análisis básico/reemplazo de var.El servidor utiliza node.js.

Quiero comprimir mi respuesta de este servidor.Como se dijo en IRC, node.js actualmente no tiene una biblioteca gzip, por lo que estoy intentando hacerlo manualmente desde la línea de comando (ya que solo estoy comprimiendo con gzip cuando no estoy en el caché).

Estoy enviando los datos del archivo a un archivo temporal y luego uso exec para llamar 'gzip -c -9 -q ' + tempFile.Recupero los datos comprimidos correctamente (al parecer) y envío el mensaje adecuado Content-Encoding encabezado como 'gzip', pero Chrome informa:

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

Además, algunos probadores independientes de gzip en línea también fallan (no solo Chrome).

Supongo que esto es algo simple que no sé acerca de generar bloques gzip para navegadores, ya que nunca he intentado hacerlo manualmente.

Cualquier ayuda sería útil.El servidor es increíblemente rápido, pero necesito comprimir el contenido para obtener el mejor rendimiento para los usuarios finales.

Gracias.

ACTUALIZARHe verificado mi Content-Length es correcto

¿Fue útil?

Solución

¿Usted ha actualizado el Content-Length para que coincida con el tamaño gzipped? Parece que eso podría arruinar la decodificación.

Otros consejos

Node todavía está a la vanguardia y parece que aún no tiene un buen manejo de datos binarios.

Codificaciones de cadenas de nodos son ascii, binario y utf8.[...] "binario" sólo mira el primeros 8 bits de los caracteres de cadena JavaScript de 16 bits.El problema es que las cadenas según ECMA son cadenas de caracteres de 16 bits.Si usa UTF-8 (es el valor predeterminado), hay cierta normalización al leer la cadena y esto corrompe gzip.Si usas ascii, obviamente no funcionará.

Funcionará si usas codificación binaria ambos leyendo y escribiendo.Los 8 bits superiores de un carácter de cadena de Javascript simplemente no se utilizan.De lo contrario, intente enviar los archivos directamente al cliente sin cargarlos en cadenas de Javascript, tal vez con la ayuda de un servidor proxy frente a Node.

Yo mismo espero que el motor V8 de Google implemente un verdadero tipo de datos de cadena binaria, algo como esta propuesta. http://groups.google.com/group/nodejs/browse_thread/thread/648a0f5ed2c95211/ef89acfe538931a1?lnk=gst&q=binary+type#ef89acfe538931a1

CommonJS también propone Binario/B, y dado que Node intenta seguir a CommonJS, hay algunas esperanzas para el futuro.

Editar acabo de descubrir el rama net2 del nodo que contiene un búfer binario (ver src/node_buffer.h).Parece que es parte de una revisión completa de la red.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top