Summary

  • كشفت أول مسودة علنية أصدرها W3C سنة 2015 مشكلة الخروج من الموقع: آثاره موزعة في مخازن متعددة داخل المتصفح، وبعضها خارج متناول نص الصفحة البرمجي.
  • حدّدت مسودة 2017 ترويسة الاستجابة Clear-Site-Data وسمّت ما يمكن طلب مسحه: cache وcookies وstorage وexecutionContexts، أو المجموعة المعروفة كلها عبر *.

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

في أغسطس 2015 نشرت W3C أول مسودة علنية تعالج هذا التشتت. تستطيع JavaScript حذف بعض البيانات، لكنها لا تصل إلى ملف ارتباط يحمل السمة HttpOnly؛ فقد وُضعت السمة أصلاً لإبعاده عن النصوص البرمجية. يحتاج الموقع إلى استجابات HTTP مناسبة وإلى معرفة الملفات التي سبق أن أنشأها كي ينهي صلاحيتها. وللتخزين المحلي والذاكرة المؤقتة أبواب أخرى. بدا زر الخروج كأنه مدير مبنى يحاول جرد المفاتيح من الذاكرة.

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

أعطت مسودة نوفمبر 2017 الورقة أسماء محددة. تأتي ترويسة Clear-Site-Data بقائمة بين علامتي اقتباس: "cookies" لملفات الارتباط، و"storage" للتخزين، و"cache" للموارد المحفوظة، و"executionContexts" للصفحات والعاملين الذين لا يزالون يعملون. ويمكن جمع أكثر من اسم في استجابة واحدة. الرمز "*" يطلب جميع الأنواع التي تعرفها هذه الآلية، بما فيها أنواع تضاف لاحقاً. إنها قائمة تنظيف، وليست تعويذة سحرية.

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

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

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

التنظيف الواسع له كلفة. سيعيد المتصفح جلب الموارد التي مُسحت من الذاكرة المؤقتة. وقد تنتهي جلسات خدمات متعددة على نطاقات فرعية حين تمسح ملفات الارتباط المشتركة. ويفقد التطبيق ما خزنه للعمل دون اتصال إذا شمل الطلب "storage". لهذا اختيرت أسماء منفصلة للأنواع؛ قرار الخروج المعتاد يختلف عن قرار إصلاح حالة ملوثة.

يسجل تاريخ النشر لدى W3C مسودات علنية في 2015 و2016 و2017. إنها صورة لمرحلة صار فيها المتصفح مكتباً ذا مخزن، لا نافذة عابرة. ومع نمو ذاكرة الويب، احتاج الوداع إلى قائمة جرد.