الخلاصة

  • وسّع RFC 3229 طلب GET الشرطي: يسمي العميل النسخ المخزنة في If-None-Match، ويعلن التحويلات المقبولة في A-IM، وقد يتلقى 226 ووصفة IM بدلاً من نسخة كاملة أخرى.
  • تتكون إعادة البناء من ثلاث هويات. يسمي Delta-Base الأساس القديم، ويحمل الجسم تعليمات الفرق، ويسمي ETag في الاستجابة النسخة الحالية المعاد بناؤها، لا بايتات الفرق.
  • كان الرمز الجديد حاجز توافق أيضاً. قد يتجاهل مخزن قديم ترويسة مجهولة ثم يحفظ الفرق بوصفه المورد كاملاً؛ جعل 226 هذا الانقطاع الدلالي مرئياً.

كان التحقق يوفر كل النقل أو لا يوفر شيئاً

إذا بقيت الاستجابة المخزنة حالية، يكفي 304 Not Modified. أما إذا تغير المورد ولو قليلاً، فالمسار المعتاد يعيد القيمة الجديدة كاملة.

كان المخزن شاهداً ثنائياً: نسخة صالحة كما هي، أو نسخة لا تساعد في كلفة النقل التالي. تعديل سطر واحد يعيد إرسال كل السطور التي لم تتغير.

نشر RFC 3229 في يناير 2002، وجعل النسخة القديمة مادة لإعادة البناء. يستطيع الخادم حساب الفرق بينها وبين النسخة الحالية وإرسال التعليمات اللازمة فقط.

بقي الامتداد اختيارياً، وهدف إلى خفض متوسط حجم الاستجابة من دون جولة إضافية، مع التعايش مع تطبيقات HTTP/1.0 وHTTP/1.1 التي لا تفهمه. لم يَعِد بأن كل تغيير ينتج فرقاً مفيداً.

الفرق ليس ضغطاً ولا نطاقاً

يعرف RFC النسخة بأنها القيمة التي يعيدها GET 200 للمتغير المختار بعد ترميز المحتوى، وقبل معالجة النسخة وترميز النقل.

يمكن عادة فك الضغط من دون نسخة قديمة. أما الفرق فيحتاج إلى الأساس الذي حُسب منه. يختار Range إحداثيات من نسخة حالية واحدة؛ ويصف delta الانتقال بين نسختين. قد يقلل كلاهما البايتات، لكن الدليل مختلف.

ولا يمثل 226 طريقة PATCH. إنه جواب GET يساعد المستلم على استعادة الحالة الحالية ولا يطلب تغيير المورد. لم يحدد RFC 3229 آليته لاستجابات الطرق الأخرى.

تمنع هذه الحدود كلمة «تزايدي» من إخفاء اختلاف الأنساب.

على العميل إثبات نقطة البداية

يسرد If-None-Match قيم ETag لنسخ قديمة يحتفظ بها العميل، ويسرد A-IM المعالجات التي يستطيع تطبيقها.

إذا ظلت إحدى القيم حالية، يبقى 304 هو الجواب المناسب. وإذا تغيرت، يستطيع خادم قادر اختيار أساس معروض وحساب فرق متوافق. إذا افتقد النسخة أو الخوارزمية أو الجدوى، يرجع 200.

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

لا معنى مشتركاً لـ«الفرق» قبل الاتفاق على: فرق عن ماذا، وبأي تحويل؟

نسقت رسالة واحدة ثلاثة أشياء

الأساس القديم موجود في المخزن. يحمل جسم 226 تعليمات التحويل. ينتج عن تطبيقها النسخة الحالية.

إذا عرض العميل عدة قيم، يحدد Delta-Base الأساس المختار. أما ETag في الاستجابة فيسمي الناتج الحالي. يؤكد RFC أنه لا يسمي قيمة الفرق، لأن الفرق ليس نسخة مستقلة.

قد يكون الجسم صحيحاً تماماً ولا يعمل منفرداً. يعتمد معناه على أساس وتحويل وهوية ناتج محددة.

حتى Content-Length يقيس جسم الفرق المنقول، لا طول النسخة المعاد بناؤها. الخلط يحول التوفير إلى بتر ظاهري.

ترتيب التحويلات جزء من النسب

تبدأ السلسلة باختيار المورد والمتغير، ثم ترميز المحتوى، وإسناد ETag للنسخة، وتطبيق delta أو range، وأخيراً ترميز النقل.

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

يحفظ A-IM وIM الترتيب. لا يجوز للمخزن حفظ أسماء غير مرتبة ثم اختيار ترتيب جديد عند الاستعمال. الأساس والخوارزمية والمعلمات والتسلسل وصفة واحدة.

تصبح البايتات القليلة موثوقة حين تبقى طريقة تحويلها إلى تمثيل مرتبطة بها.

منع 226 المخازن غير الواعية من التخمين

تردد المصممون في إضافة رمز جديد، لكن سلوك الوسطاء المنشورين فرض ذلك.

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

شكل 226 المجهول حاجزاً أوضح. لاحظ RFC أن الوكلاء يمررون الحالات المجهولة ولا يحاولون تخزينها. يستطيعون النقل من دون ادعاء الفهم.

وحذر النص من أن Vary: If-None-Match, A-IM وحده لا يمنع مسار تحقق خاطئ واحد على الأقل. وجب إظهار الفرق حيث لا تمحوه منطقية 200 القديمة.

يشرح IM الوصفة ويمنع 226 افتراض الكمال

يجب أن تستخدم استجابة الفرق 226 وتحمل IM الذي يسمي على الأقل ترميز الفرق. ويجب أن يكون الطلب قد قبل المعالجة في A-IM وقدم أساساً في If-None-Match.

تعني الحالة أن GET تحقق بواسطة معالجة أو أكثر للنسخة الحالية. وقد لا تصبح النسخة متاحة إلا بعد جمع الاستجابة مع استجابات سابقة أو لاحقة.

لذلك لا يعني 226 كلمة delta فقط. يسمح الإطار بتركيب range ومعالجات أخرى. يسجل IM التسلسل، ويمنع 226 افتراض أن الجسم هو النسخة الكاملة.

العبارة المختصرة «IM Used» لا تحل محل الحقول المنظمة اللازمة للتنفيذ.

يستطيع المخزن القادر إعادة البناء

لو حُظر التخزين كله لضاع جانب من المنفعة. يفرق RFC بين مخزن جاهل وآخر يفهم العقد كاملاً.

يمكن للمخزن القادر فك كل المعالجات، وبناء النسخة الحالية وحفظها كاستجابة 200. ويمكنه ترك اختيار النطاق وحفظ 206، أو الاحتفاظ بـ226 الخام تحت قواعد خاصة.

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

ترسم توجيهة Cache-Control المسماة im حدود القدرة: يوقف no-store المخازن العادية، ولا تتبع التعليمات الخاصة إلا تطبيقات تفهم 226 وA-IM وIM.

للاحتفاظ بالماضي كلفة

لا يوجد فرق مفيد من دون أساس باقٍ. يستطيع العميل الاحتفاظ بنسخ عديدة وعرض ETags متعددة. وإذا احتفظ الخادم بالتاريخ، يختار الأساس المناسب ويسميه في Delta-Base.

لكن المساحة والتاريخ محدودان، ومقارنة الأسس تستهلك المعالج والذاكرة والإدخال والإخراج. تلميح الاحتفاظ ليس وعداً أبدياً.

يغير التحسين الحوافز: قد تُحفظ نسخة قديمة لا للعرض، بل لبناء نسخة مستقبلية. ولا ينبغي للأصل حفظ الإصدارات أو حساب الفروق مسبقاً إلا إذا غطى التوفير المتوقع الكلفة.

حق العودة إلى 200 جزء من التحكم التشغيلي. إذا كان الفرق أكبر أو أبطأ أو غائباً، تكون النسخة الكاملة أفضل.

تحفظ السجلات الحالية المفردات

ما زال سجل IANA لحالات HTTP يربط 226 IM Used بـ RFC 3229. ويسجل سجل IANA لأسماء حقول HTTP A-IM وDelta-Base وIM كحقول دائمة.

لا يثبت التسجيل انتشار الاستخدام. إنه يحفظ العقد الذي تشير إليه الرموز ويمنع إعادة توظيفها لمعنى تزايدي مختلف.

العبرة ليست أن delta هيمنت على الويب، بل مقدار الهوية التي احتاج HTTP إلى حفظها كي ينقل أقل ويظل الناتج صحيحاً.

ظهرت النسخة بعد إعادة البناء

في 226 يمكن أن تختلف الرسالة المنقولة عن التمثيل الحالي. تنقل الشبكة تحويلاً ولا تزعم أن التحويل هو النتيجة الكاملة.

يثبت العميل الأساس، ويختاره الخادم، ويثبت IM الترتيب، ويسمي ETag الناتج، ويفهم المخزن السلسلة أو يرفض تحويل البايتات إلى وثيقة.

الفرق بلا نسب ليس حقيقة اقتصادية، بل بايتات قليلة تحمل افتراضاً مخفياً.

جعل HTTP 226 الافتراض ظاهراً: لم يتلق المستلم النسخة الجديدة، بل طريقة قابلة للتحقق لصنعها من النسخة التي أثبت امتلاكها.