Tamim Fahed نشر 30 يوليو 2021 أرسل تقرير نشر 30 يوليو 2021 لقد قمت بإضافة الترويسة التالية إلى الطلبات في خادم node.js للوصول إلى طول البيانات خلال الطلب: res.set({'Content-Type':'text/plain;charset=utf-8', 'Content-Length': Buffer.byteLength(data, 'utf-8')}); وعندما أقوم بطباعة المحتوى أحصل على حجم البيانات كما هو، لكن إذا قمت باستعراضها ضمن المتصفح في الكونسول أرى جميع الخصائص عدى الخاصية content-length: Connection:keep-alive Content-Encoding:gzip Content-Type:text/plain;charset=utf-8 Date:Sat, 17 Aug 2021 08:21:59 GMT Transfer-Encoding:chunked Vary:Accept-Encoding X-Powered-By:Express لماذا تختفي هنا content-length؟ وكيف يمكنني ضمان وجودها مع جميع الطلبات التي سيتم إرسالها؟ 1 اقتباس
1 Sam Ahw نشر 30 يوليو 2021 أرسل تقرير نشر 30 يوليو 2021 بالإطلاع على محتوى الرد نجد الخاصية Transfer-Encoding: chunked، وهنا لا يمكن تضمين content-length لأن البيانات يتم تقسيمها إلى جزء أو عدة أجزاء (ما يدعى ب chunks) ضمن محتوى الرد (response body) مع وجود علامات ضمن كل جزء تدل على حجم بيانات هذا الجزء فقط. وإن node.js بشكل افتراضي يقوم بإضافة Transfer-Encoding: chunked ضمن ترويسة الطلب، ولكن عند إضافة Content-Length يتم تعطيلها. أما وجود الخاصية Content-Encoding:gzip ضمن الترويسة فتدل على أنه تم تفعيل الوسيط connect.compress والذي يقوم أيضاً بإيقاف Content-Length. ولكن بجميع الأحوال السابقة في حال لم تقم بإنشاء محتوى مضغوط بنفسك بشكل يدوي، فإن الترويسة Content-Length التي قمت بإنشائها بشكل يدوي ستكون غير ملائمة للمحتوى الأخير الذي يتم إرسالة من طرف الخادم وبالتالي يجب عليك الاعتماد على الوسيط connect بدلاً من إجرائها بشكل يدوي لتجنب بعض المشاكل. وفي النهاية يجب الأخذ بعين الاعتبار أن البيانات التي يتم إرسالها من الخادم إلى المستخدم النهائي من الممكن أن تخضع للعديد من الإضافات أو التعديلات بحسب الوسطاء التي يتم استخدامها والتي تقوم بدورها بالتعديل مرات عديدة على ترويسة الطلب. 1 اقتباس
السؤال
Tamim Fahed
لقد قمت بإضافة الترويسة التالية إلى الطلبات في خادم node.js للوصول إلى طول البيانات خلال الطلب:
res.set({'Content-Type':'text/plain;charset=utf-8', 'Content-Length': Buffer.byteLength(data, 'utf-8')});
وعندما أقوم بطباعة المحتوى أحصل على حجم البيانات كما هو، لكن إذا قمت باستعراضها ضمن المتصفح في الكونسول أرى جميع الخصائص عدى الخاصية content-length:
Connection:keep-alive Content-Encoding:gzip Content-Type:text/plain;charset=utf-8 Date:Sat, 17 Aug 2021 08:21:59 GMT Transfer-Encoding:chunked Vary:Accept-Encoding X-Powered-By:Express
لماذا تختفي هنا content-length؟ وكيف يمكنني ضمان وجودها مع جميع الطلبات التي سيتم إرسالها؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.