الخلاصة
- قسّم RFC 3391 رسائل MIME إلى مقاطع مرقمة محددة الطول، وسمح بتشابكها حتى تصل الصورة قبل موضع الإشارة إليها في الرسالة الجذرية أو بعده مباشرة.
- كان التقارب جدولاً يختاره المُنتِج، لا تغذية راجعة من المستهلك؛ لذلك لم يثبت المقطع الصحيح كفاية الذاكرة ولا نجاح العرض ولا أن كل الرسائل المفتوحة ستُغلق لاحقاً.
يكتشف الماسح الضوئي الصفحة في أثناء قراءتها، لا قبل ذلك. وقد لا يعرف الصورة المطلوبة إلا عندما يولد المرجع إليها. في الجهة الأخرى تريد الطابعة بدء العمل قبل وصول الملف كله. إذا وُضعت الصور جميعاً قبل النص وجب اكتشافها وتخزينها مبكراً، وإذا وُضعت بعده انتظرت الطابعة نهاية نص طويل كي تحصل على صورة الصفحة الأولى.
كان multipart/related يصف مكونات الكائن المركب كأجزاء متتابعة تفصلها حدود. العلاقة موجودة، غير أن المرجع داخل جزء طويل والجسم الذي يسميه قد تفصل بينهما أعداد كبيرة من الثمانيات. التمثيل سليم، لكن ترتيبه لا يلائم دائماً المعالجة المتدرجة.
نُشر RFC 3391 في ديسمبر 2002 بوصفه RFC معلوماتياً، وعرّف النوع application/vnd.pwg-multiplexed. تتكون الكينونة فيه من مقاطع؛ يحمل كل مقطع رسالة MIME كاملة أو جزءاً منها. ويمكن أن تتناوب مقاطع رسائل مختلفة، فيتوقف النص الجذري، تمر الصورة، ثم يستأنف النص.
فرّقت الوثيقة بين الكائن وتمثيله. الكائن المركب وجذره ومكوناته مفاهيم مجردة، أما الكينونة والرسائل فهي تمثيلها بالثمانيات. وكان المقصود أن تكون الرسالة بعد إعادة تركيبها مطابقة، ثمانية بثُمانية، لجزء multipart/related الذي يمثل المكون نفسه. الابتكار في توقيت الوصول، لا في معنى الصورة أو الرابط.
يبدأ رأس المقطع بكلمة CHK ثم رقم الرسالة وطول الحمولة والحالة MORE أو LAST. يحدد الطول مكان نهاية الحمولة من دون البحث عن سلسلة فاصلة. تعني MORE أن للرسالة بقية، بينما تغلق LAST آخر مقاطعها. قد تتخللها رسائل أخرى، لكن ترتيب أجزاء الرسالة الواحدة لا يتغير.
يجب أن يحتوي المقطع الأول الرسالة الجذرية كاملة أو جزءاً منها. ويسمح بطول صفري، فتظهر أول ثمانيات الجذر لاحقاً. أما نهاية الكينونة كلها فهي CHK 0 0 LAST، ويُحجز الرقم صفر لهذا الحارس الأخير.
لا يصلح الحارس ما بقي مفتوحاً قبله. إذا جاء قبل آخر مقطع لكل رسالة، يصبح سلوك المستهلك غير محدد. وعادة يميز كل رقم رسالة واحدة، لكن إعادة استخدام الرقم مسموحة وإن كانت غير مستحبة. عندئذ يجب إغلاق الرسالة الأولى بـLAST قبل بدء الثانية بالرقم نفسه.
يعلن المعامل الإلزامي type نوع الوسائط للرسالة الجذرية. بذلك يعرف المستهلك فئة الكائن قبل تفكيك الداخل. إذا خالف الإعلان Content-Type الحقيقي للجذر فلا تَعِد المواصفة بسلوك معين. ويمكن استخدام Content-ID وContent-Location وفق أنماط MHTML لربط المكونات، من دون أن يتولى RFC 3391 تعريف لغة العلاقات نفسها.
في مثال الطباعة يولد المُنتِج سلسلة طويلة من أوصاف الصفحات، ولا يعرف الصور إلا عند بلوغها. يستطيع وضع كل صورة قبل مرجعها الأول بقليل. حين تقرأ الطابعة المرجع تكون البيانات قد وصلت، من دون انتظار نهاية الجذر أو الاحتفاظ بكل صور المستقبل.
في مثال المسح يمكن أن تأتي الصورة بعد المرجع مباشرة. يتعرف المستهلك أولاً إلى موضعها ثم يستقبلها. هكذا تقصر المسافة الفعلية بين الاسم والمادة، ويعمل الطرفان من دون تجميع المهمة كاملة.
لكن المثال الذي يترك التخطيط للمستهلك يكشف حد الرؤية. قد توضع صورتان جنباً إلى جنب، وقد يلتف النص حول صورة. يعرف المُنتِج موضع المرجع في نصه، ولا يعرف عرض صفحة الطرف الآخر ولا خطوطه ولا سعة مخزونه ولا سياسته في العرض.
قد يبدو تشابك شرائط صورتين متجاورتين فعالاً. فإذا نفدت الذاكرة بقي لدى المستهلك أجزاء متناوبة من صور متعددة من دون اكتمال أي منها. لذلك نصح RFC بعدم تشابك الصور في هذه الحالة. إتاحة العملية لا تجعلها سياسة صحيحة.
النص الملتف أصعب. إذا قطع المُنتِج النص مبكراً اضطر المستهلك إلى تخزين الصورة كلها أو إنهاء الالتفاف قبل أوانه. وإذا تأخر في القطع احتفظ المستهلك بنص زائد وربما أخر الصورة. وبما أن النص عادة أصغر من بيانات الصورة، رجحت الوثيقة إرسال نص أكثر لا أقل قبل الصورة. إنها قرينة عملية، وليست مشاهدة لحالة المستقبل.
لهذا تقع ملاحظة IESG في قلب الوثيقة. رأت أن استعمال النوع مناسب فقط حين يعرف المُنتِج قدرات المستهلك وحدوده معرفة كاملة. تختلف حاجات المستهلكين وتوقيتها، ولا توفر الكينونة وسيلة لاكتشافها. عندما تكون القدرات مجهولة ينبغي النظر في آلية ثنائية الاتجاه مثل BEEP.
الفارق هو موضع سلطة الطلب. في الكينونة المتعددة يتنبأ المُنتِج بالحاجة ويدفع المكون. في بروتوكول ثنائي يستطيع المستهلك طلب الصورة عند المرجع أو طلب شرائط تلائم تخطيطه. قد يضيف الطلب انتظاراً، بينما قد يخطئ الدفع المبكر. السرعة والمعرفة ليستا الشيء نفسه.
احتفظ المستهلك أيضاً بسلطة العرض. إذا فهم الحاوية ونوع الجذر عرض المكونات في سياق الكائن المركب، وعندها قد تكون إشارة Content-Disposition زائدة أو مضللة ويجب تجاهلها لأغراض العرض. إذا فهم الحاوية ولم يفهم الجذر، أمكنه حجب الكل أو معاملة الرسائل كمرفقات مختلطة. وإذا لم يفهم النوع بقيت الكينونة معتمة.
جاءت مخاطر التخزين من حرية الجدولة ذاتها. يستطيع مُنتِج معطل أو خبيث فصل أجزاء رسالة بملايين الثمانيات أو عدم إرسال نهايتها. ويمكنه فتح رسائل كثيرة معاً، أو الإشارة إلى مكونات لا تصل، أو إرسال موارد كثيرة قبل أن يعرف المستهلك متى يجوز التخلص منها.
لا يلزم أن يكون كل مقطع مزوراً. قد يصح الرقم والطول وحقل الاستمرار محلياً، بينما تتراكم الوعود الناقصة وتكبر كلفة التخزين بلا حد عملي. إثبات صحة الإطار ليس إثباتاً لسلامة الموارد الكلية.
يوضح مبدأ «المواصفة الأولية الدنيا» لدى Lu Heng سبب ضيق الطبقة المشتركة. اتفق الطرفان على الأرقام والأطوال والاستمرار والجذر والنهاية، وبقي التخطيط وإدارة الذاكرة محليين وقابلين للتطور من دون إذن مركزي.
أما «أولوية الكود العامل» فتضع حد الدليل. تسجيل نوع وسائط لا يثبت أن طابعة حقيقية واصلت عملها. وصول LAST لا يثبت ظهور الصورة الصحيحة. السيل الأصلي، ورسم المراجع، وقياسات الذاكرة، والناتج المعروض إيصالات مستقلة.
جعل RFC 3391 القرب قابلاً للبرمجة، ولم يجعل المستهلك مرئياً. وصلت الصورة بجوار مرجعها، لكن المُنتِج بقي خلف زجاج لا يرى ما يحدث بعده. ترتيب البايتات قدرة؛ معرفة الحاجة تتطلب قناة أخرى.
المصادر
إحاطة الأعضاء
سياق أعمق للملف الشخصي
سجّل الدخول بمستوى العضوية المناسب لفتح الإحاطة الكاملة وملاحظات المصادر.
للدائرة الاستراتيجية فقط
الدائرة الاستراتيجية
مفتوح لجميع القراء. افتح إحاطات الملف الشخصي بعد الانضمام وتسجيل الدخول.
انضم إلى الدائرة الاستراتيجيةلأعضاء تحالف القيادات فقط
تحالف القيادات
لأصحاب الأصول الفكرية المؤهلين وللإدارة؛ سجّل الدخول للوصول إلى إحاطات التحالف.
انضم إلى تحالف القيادات
