الخلاصة

  • ربطت آلية الاستئناف القديمة موضعاً لدى المرسل بموضع لدى المستقبل، واستطاعت حفظ حالة التخزين والتحويل اللازمة للعودة الصحيحة.
  • جعل REST STREAM العلامة لاحقاً عدداً من الثمانيات التي يتجاوزها النقل التالي. بقي العدد إحداثية لتمثيل منقول، لا اسماً لنسخة الملف.
  • يشترط مثال RFC 3659 التحقق مسبقاً من أن ملف الخادم لم يتغير. قبول REST لا ينفذ هذا التحقق.

قبول 802816 لا يثبت ما يوجد عنده

ينقطع تنزيل بعد 802816 ثمانية. يعيد العميل الاتصال، يختار TYPE I، يرسل REST 802816 ويتلقى 350، ثم يطلب RETR. يبدأ الخادم من الموضع المطلوب.

هذا يثبت أنه حفظ قيمة للعملية التالية فقط. لا يقارن المقدمة المحلية بالمحتوى البعيد، ولا يضمن أن المسار ما زال يشير إلى النسخة السابقة. إذا استبدل الملف بآخر طويل بما يكفي، فقد يلتحم صدر قديم بذيل جديد وينتهي النقل بلا خطأ بروتوكولي.

لكل نظام موضع يفهمه بطريقته

عدّ RFC 765 الاستئناف وسيلة للتعافي من الأعطال. لا ينقل REST بيانات، بل يضع الخادم عند علامة قبل أمر الخدمة المتوقف الذي يجب أن يأتي مباشرة بعده.

كانت العلامة المبهمة مناسبة لاختلاف الحواسيب. فالثمانية المنطقية المخزنة ليست بالضرورة ثمانية النقل ذات البتات الثمانية، كما تحدد TYPE وSTRU وMODE التمثيل والبنية وصيغة المجرى. اختلاف أطوال الكلمات والمحارف والأسطر والسجلات يمنع اعتبار إزاحة القرص لغة مشتركة.

حافظ RFC 959 على أوضاع Stream وBlock وCompressed. تسمح الصيغة في الوضعين الأخيرين بإدخال كتل علامات يمكن فصلها عن بيانات الملف. ينشئ المرسل حالة يعرف كيف يعود إليها، ويربطها المستقبل بموضعه المحلي. الاتفاق هو علاقة الموضعين، لا تطابق ترميزهما.

العلامة تحفظ ما وراء الرقم

صحح RFC 1123 وصف رد 110: تمثل ssss موضع المرسل، وتمثل rrrr الموضع المقابل لدى المستقبل. ويمكن أن يبقى الترميز محلياً لأن النظام الذي أنشأ القيمة هو الذي يفسرها لاحقاً.

ينبغي للمستقبل أن يكتب كل البيانات السابقة في تخزين ثابت قبل أن يعلن موضعه. وإلا بقيت العلامة بعد عطل محا الثمانيات التي زعمت العلامة أنها آمنة.

وقد تشمل الحالة وضع المحوّل نفسه. في TYPE A يمكن تحويل CR LF على الشبكة إلى LF واحدة محلياً. إذا جاءت العلامة بين CR وLF، فلا بد أن يتذكر المستقبل أن CR شوهد وحذف. لا تكفي إزاحة ملف عادية لاستعادة هذه المرحلة.

لذلك عرّف RFC 1123 الرد 554 لموضع لا يمكن تطبيقه و555 لعدم تطابق TYPE أو STRU مع الجزء الموجود. صحة بناء العلامة لا تضمن صحة سياقها.

حوّل STREAM العلامة إلى عدّ

كانت الآلية دقيقة لكنها ثقيلة. ذكر RFC 1123 عام 1989 أن Restart وABOR وBlock mode خصائص متانة مفيدة لم تكن مطبقة على نطاق واسع، ولم يضع REST ضمن الحد الأدنى. لا يمثل ذلك إحصاءً للنشر الحالي.

في Stream لا يمكن إدخال علامة صريحة من دون أن تبدو كأنها بيانات. لذا عرّف RFC 3659 القيمة العشرية في REST STREAM بأنها عدد الثمانيات التي لن يرسلها النقل اللاحق من بدايته.

يعلن الخادم هذه القدرة عبر FEAT الذي عرّفه RFC 2389. تخبر العبارة REST STREAM العميل بأن الدلالة مدعومة، لكنها لا تخبره بأن الكائن خلف المسار لم يتبدل.

ويظل العد تابعاً للتمثيل. يعرض RFC 3659 ملفاً نصياً حجمه 1830 عند TYPE I و1942 عند TYPE A، لأن تحويل نهاية السطر يضيف ثمانيات إلى المجرى. الموضع يخص ما سينقل وفق الإعدادات الحالية، وليس دائماً موضع التخزين الأصلي.

عند استئناف رفع، يحتاج العميل إلى معرفة مقدار ما استلمه الخادم وحفظه فعلاً. تساعد SIZE في قياس الطول تحت التمثيل المختار، لكنها ليست بصمة للمقدمة المحفوظة.

الشرط الذي صرحت به الوثيقة

قبل REST 802816 يقول مثال RFC 3659 إن النقل السابق استخدم TYPE I وإنه جرى التحقق من أن ملف الخادم لم يتغير. تأتي استمرارية النسخة من هذا التحقق الخارجي، لا من الإزاحة.

في RETR يتحمل العميل مسؤولية دمج الذيل الجديد مع جزئه المحلي. وفي STOR يكتب الخادم داخل كائن قائم. تكون النتيجة غير معرّفة إذا لم يكن الغرض إكمال النقل السابق الفاشل، أو لم تقع العلامة عند نهاية البيانات الموجودة، أو لم يمدد الذيل الجديد الملف إلى طوله السابق على الأقل. وإذا سمح بـAPPE بعد REST فعليه أن يتصرف مثل STOR عند الموضع المحدد.

350 يحتفظ بحالة ولا يكمل العمل

يجب أن يكون REST آخر أمر قبل أمر البيانات. قد يقبل الخادم القيمة برد 350 ثم لا يكتشف خروجها عن النطاق إلا عند RETR أو STOR. وإذا تعذر إرسال الأمر التالي، فعلى العميل إعادة REST بدلاً من افتراض بقاء الحالة عبر حوار آخر.

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

حدود الأدلة

يوثق RFC 765 الأصل، وRFC 959 الأوضاع، وRFC 1123 الموضعين والتخزين، وRFC 2389 اكتشاف القدرة، وRFC 3659 STREAM وSIZE. لا تقيس هذه النصوص الانتشار الحالي ولا تضمن حفظ النسخ. الاستئناف في FTP ليس مصادقة أو بصمة محتوى أو لقطة تخزين أو نقلاً مرة واحدة بالضبط.