gzip без поддержки сервера?

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

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

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

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

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

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

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

Спасибо.

ОБНОВЛЕНИЕ я проверил мой Content-Length корректно

5
задан Ijas Ameenudeen 18 January 2019 в 10:26
поделиться

2 ответа

Обновили ли вы Content-Length, чтобы он соответствовал размеру сжатого gzip-архива? Похоже, это может испортить декодирование.

1
ответ дан 15 December 2019 в 06:24
поделиться

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

Строковые кодировки узла - ascii, двоичные и utf8. [...] "двоичный" просмотр [s] только на первых 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 также предлагает Binary / B , и, поскольку Node пытается следовать CommonJS, есть некоторая надежда на будущее.

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

2
ответ дан 15 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: