Pergunta

Eu escrevi um servidor CSS que faz minimização e análise básica/substituição VAR. O servidor está usando o Node.js.

Estou querendo dar minha resposta deste servidor. Como informado no IRC, o Node.js atualmente não possui um GZIP LIB, por isso estou tentando fazê -lo manualmente a partir da linha de comando (pois estou apenas procurando quando não estiver em cache).

Estou empurrando os dados do arquivo para um arquivo temp e depois usando o EXEC para ligar 'gzip -c -9 -q ' + tempFile. Recebo os dados compactados de volta corretamente (ao que parece) e envio o adequado Content-Encoding cabeçalho como 'gzip', mas o Chrome relata:

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

Além disso, alguns testadores de GZIP independentes também falham (não apenas Chrome).

Suponho que isso seja algo simples que eu não sei sobre a geração de blocos GZIP para navegadores, visto que nunca tentei fazê -lo manualmente.

Qualquer assistência seria útil. O servidor está acelerando rapidamente, mas preciso dar o conteúdo para obter o melhor desempenho para os usuários finais.

Obrigado.

ATUALIZAREu verifiquei meu Content-Length está correto

Foi útil?

Solução

Você atualizou o comprimento do conteúdo para corresponder ao tamanho de Gzipp? Parece que isso pode estragar a decodificação.

Outras dicas

O nó ainda está sangrando e ainda não tem um bom manuseio de dados binários.

Codificações de string do nó são ascii, binários e utf8. [...] "binário" só olha para o Primeiros 8 bits dos caracteres de string javascript de 16 bits. O problema é que as cordas de acordo com a ECMA são seqüências de caracteres de 16 bits. Se você usar o UTF-8 (é o padrão), há alguma normalização ao ler a string e isso corrompe o GZIP. Se você usa ASCII, obviamente não funcionará.

Vai funcionar se você usar codificação binária Ambas leitura e escrita. Os 8 bits superiores de um caractere de string javascript simplesmente não estão sendo usados. Caso contrário, tente enviar os arquivos diretamente para o cliente, sem carregar em seqüências de caracteres JavaScript, talvez com a ajuda de um servidor proxy na frente do nó.

Eu mesmo espero que o mecanismo V8 do Google implemente um tipo de dados de string binário, algo como esta proposta http://groups.google.com/group/nodejs/browse_thread/thread/648a0f5ed2c95211/ef89acfe538931a1?lnk=gst&q=binary+type#ef89Acfe538931a1

Commonjs também está propondo Binário/b, e, como o Node tenta seguir o CommonJS, há alguma esperança para o futuro.

Editar Acabei de descobrir o Ramo Net2 do nó que contém um buffer binário (consulte SRC/Node_Buffer.h). Parece que faz parte de uma revisão completa da rede.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top