Вопрос

Я написал CSS-сервер, который выполняет минимизацию и базовый синтаксический анализ / замену var.Сервер использует node.js.

Я хочу заархивировать свой ответ с этого сервера.Как сказано в IRC, node.js в настоящее время у него нет библиотеки gzip, поэтому я пытаюсь сделать это вручную из командной строки (поскольку я загружаю архив только тогда, когда его нет в кэше).

Я переношу данные файла во временный файл, а затем использую exec для вызова 'gzip -c -9 -q ' + tempFile.Я получаю сжатые данные обратно правильно (кажется) и отправляю соответствующее Content-Encoding заголовок как 'gzip', но Chrome сообщает:

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

Кроме того, некоторые независимые тестировщики gzip онлайн также терпят неудачу (не только Chrome).

Я предполагаю, что это что-то простое, чего я не знаю о генерации блоков gzip для браузеров, поскольку я никогда не пытался сделать это вручную.

Любая помощь была бы полезна.Сервер работает очень быстро, но мне нужно сжать содержимое, чтобы получить максимальную производительность для конечных пользователей.

Спасибо.

Обновить Я подтвердил свою Content-Length является правильным

Это было полезно?

Решение

Вы обновили длину содержимого, чтобы оно соответствовало архивированному размеру?Похоже, что это может испортить расшифровку.

Другие советы

Узел все еще работает на пределе возможностей и, похоже, пока не умеет хорошо обрабатывать двоичные данные.

Строковые кодировки узла являются ascii, двоичными и utf8.[...] "бинарный" взгляд только на первые 8 бит из 16-битных символов строки JavaScript.Проблема в том, что строки в соответствии с ECMA являются 16-битными символьными строками.Если вы используете UTF-8 (это значение по умолчанию), при чтении строки происходит некоторая нормализация, и это повреждает gzip.Если вы используете ascii, это, очевидно, не сработает.

Это сработает, если вы используете двоичное кодирование и то, и другое чтение и письмо.Верхние 8 битов символа строки Javascript просто не используются.Если нет, попробуйте отправить файлы непосредственно клиенту без какой-либо загрузки в строки Javascript, возможно, с помощью прокси-сервера перед Node.

Я сам надеюсь, что движок Google V8 реализует истинный двоичный строковый тип данных, что-то вроде этого предложения http://groups.google.com/group/nodejs/browse_thread/thread/648a0f5ed2c95211/ef89acfe538931a1?lnk=gst&q=binary+type#ef89acfe538931a1

CommonJS также предлагает Двоичный /B, и поскольку Node пытается следовать CommonJS, есть некоторая надежда на будущее.

Редактировать Я только что обнаружил, что филиал net2 узла, который содержит двоичный буфер (см. src/node_buffer.h).Похоже, это часть полной перестройки сети.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top