تقنية

تحقق يصفه المساعد: هل 304 أرسل نسخة جديدة؟

رسم توضيحي: نسخة محفوظة: وسم أ؛ شرط: If-None-Match مع أ؛ تطابق مفترض: رد 304؛ لا جسم مورد جديد
مخطط من إعداد بحر العلوم. فرع تحقق رمزي؛ لا يثبت صحة خبر أو ثبات المورد مستقبلا

رد 304 ليس نسخة جديدة من جسم المورد. قد يقرأ المساعد الرقم في سجل ثم يقول «حدث الملف»، مع أن السؤال كان التحقق من نسخة محفوظة. نؤلف بطاقة شرطية بوسم ETag رمزي؛ نراجع معنى الرد المحدد دون إرسال طلب أو تشغيل مخزن متصفح.

الخلاصة السريعة

لا يحمل 304 جسما؛ يجيب عن طلب GET أو HEAD شرطي حين يكون الشرط كاذبا، فلا حاجة لإعادة المورد. [1] وصف التحقق لا يثبت وصول جسم جديد أو صحة محتواه.

  • 304 يخص GET أو HEAD شرطيًا، مثل If-None-Match؛ لا يحمل جسما. [1] نقرأ الطلب والرد معا بدلا من عزل الرقم.
  • في ورقتنا نسخة محفوظة ذات وسم«أ»، وطلب If-None-Match به الوسم نفسه؛ نفترض تطابق الوسم وتلقي 304، لا جسم مورد جديد.
  • المصدر يصف النسخة المحفوظة بأنها ما زالت صالحة في هذا التحقق. [1] ذلك لا يثبت صحة خبر فيها أو ثبات المورد مستقبلا.
  • قراءة 304 ليست حساب عمر مخزن ولا شاهدا بأن النسخة المحلية موجودة وقابلة للقراءة؛ نحتاج تلك الحالة، ولم ننفذ طلبا أو تخزينا.

ما السياق اللازم قبل الرقم؟

يشرح MDN أن 304 يأتي مع GET أو HEAD شرطي بواسطة If-None-Match أو If-Modified-Since حين يقيم الشرط كاذبا، وأن رده لا يحتوي جسما. [1]

إذن نحتاج بطاقة الطلب التي جعلت الرد شرطيا. لا نقرأ 304 كعدد بايتات أو عدد كلمات تغيرت. ويسمي المساعد الطريقة والشرط، ثم يبين إن كانت المادة تحتوي الرد فعلا أم مجرد توقع مؤلف.

نختار هنا If-None-Match فقط. لا نجمع معه شرط تاريخ من بطاقة أخرى، ولا نفسر وسم ETag بأنه توقيت أو بصمة تحقق حسب خوارزمية لم يقدمها المثال.

كيف نبني خطا ورقيا قصيرا؟

نؤلف نسخة محفوظة للمورد ع، ونسمي وسمها «أ» في الورقة. نكتب طلب GET بشرط If-None-Match يحتوي الوسم أ. ثم نعلن أن التحقق في هذا الفرع وجد الوسم مطابقا ورد 304؛ هذه نتيجة مفترضة وليست حركة شبكة.

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

أحرف الوسم أسماء رمزية فقط. لم نحسب بصمة ملف، ولا نعرف من الوسم أ ما الكلمات الموجودة في المحتوى.

خطوة مؤلفةمادتهاحد الاستنتاج
نسخة محفوظةوسم أالمحتوى غير معروض هنا
طلب شرطيIf-None-Match مع أتحقق متعلق بالوسم
رد مفترض304دون جسم جديد

أي صلاحية يؤكدها الوصف؟

يصف المصدر 304 بتأكيد أن المورد المحفوظ لدى العميل ما زال صالحا وفق هذا التحقق. [1]

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

كذلك لا يضمن هذا الرد بقاء المورد كما هو غدا. لا نكتب حكما دائما من جواب متعلق بطلب محدد؛ ولو تغيرت مادة أو وسوم لاحقا نقرأها بسجلها.

هل نحتاج فحص حالة المخزن؟

تختلف هذه القراءة عن سؤال هل عمر نسخة أقل من مدة طزاجتها. ورقتنا لا تحمل Age ولا max-age، فلا نستعير أرقام مقالة أخرى لحساب عمرها. يوجد شرط ورد مفترض، لا جدول أزمنة كامل.

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

لم نرسل طلبا أو ننشئ مخزنا أو نحمل جسما. يسجل الملخص شرط الوسم ورد 304 وغياب الجسم، ويفصل صحة المحتوى وحالة النسخة الفعلية عن معنى التحقق الموصوف.

المصادر ومتابعة القراءة

  1. MDN:304 NotModified (يفتح في نافذة جديدة)developer.mozilla.org

أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.