سؤال

لقد كتبت خادم CSS الذي يقوم بالتقليل والاستبدال الأساسي لتحليل/var. الخادم يستخدم Node.js.

أرغب في الحصول على ردي من هذا الخادم. كما قيل في IRC ، لا يوجد لدى Node.js حاليًا GZIP LIB ، لذلك أحاول القيام بذلك يدويًا من سطر الأوامر (لأنني فقط Gzipping عندما لا أكون في ذاكرة التخزين المؤقت).

أقوم بضغط بيانات الملف إلى ملف مؤقت ثم استخدام EXEC للاتصال 'gzip -c -9 -q ' + tempFile. أحصل على البيانات المضغوطة بشكل صحيح (على ما يبدو) ، وأرسل ما هو مناسب Content-Encoding رأس كما 'gzip', ، لكن تقارير كروم:

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

أيضا ، تفشل بعض اختبار GZIP المستقل عبر الإنترنت أيضًا (وليس فقط Chrome).

أفترض أن هذا شيء بسيط لا أعرفه عن توليد كتل GZIP للمتصفحات ، مع رؤية أنني لم أحاول أبدًا القيام بذلك يدويًا.

أي مساعدة ستكون مفيدة. الخادم يحترق بسرعة ، لكنني بحاجة إلى gzip المحتوى للحصول على أفضل أداء للمستخدمين النهائيين.

شكرًا.

تحديثلقد تحققت Content-Length صحيح

هل كانت مفيدة؟

المحلول

هل قمت بتحديث طول المحتوى لتتناسب مع حجم Gzipped؟ يبدو أن هذا قد يرفع فك التشفير.

نصائح أخرى

لا تزال العقدة تنزف الحافة ويبدو أنها لم تتمتع بعد معالجة جيدة للبيانات الثنائية.

ترميزات سلسلة العقدة هي ASCII ، ثنائي و UTF8. [...] "ثنائي" لا تنظر إلا إلى أول 8 بت من أحرف سلسلة JavaScript 16bit. المشكلة هي أن السلاسل وفقًا لـ ECMA هي سلاسل شخصية 16 بت. إذا كنت تستخدم UTF-8 (إنه الافتراضي) ، فهناك بعض التطبيع عند القراءة في السلسلة ، وهذا يفسد GZIP. إذا كنت تستخدم ASCII ، فمن الواضح أنها لن تعمل.

ستعمل إذا كنت تستخدم الترميز الثنائي على حد سواء قراءة وكتابة. لا يتم استخدام 8 بتات أعلى من حرف JavaScript. إذا لم يكن الأمر كذلك ، فحاول إرسال الملفات مباشرة إلى العميل دون أي تحميل في سلاسل JavaScript ، ربما بمساعدة خادم وكيل أمام العقدة.

آمل أن يقوم محرك V8 من Google بتنفيذ نوع بيانات سلسلة ثنائية حقيقية ، شيء مثل هذا الاقتراح http://groups.google.com/group/nodejs/browse_thread/thread/648a0f5ed2c95211/ef89acfe538931a1؟lnk=gst&q=binary+type#ef8938931a1

CommonJS يقترح أيضا ثنائي/ب, وبما أن العقدة تحاول اتباع CommonJs ، فهناك بعض الأمل في المستقبل.

تعديل لقد اكتشفت للتو فرع Net2 من العقدة التي تحتوي على عازلة ثنائية (انظر src/node_buffer.h). إنه جزء من إصلاح شامل للشبكة على ما يبدو.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top