وجود ترويسة في وصف رد لا يثبت أن شيفرة صفحة تستطيع قراءتها. حين يساعد الذكاء الاصطناعي في تفسير اتصال بين مصدرين، يحتاج إلى الفصل بين الرد وشروط إظهار حقوله للبرنامج. نقرأ Access-Control-Expose-Headers في MDN، ونؤلف ثلاث بطاقات دون إرسال طلب أو تشغيل متصفح.
الخلاصة السريعة
تحدد الترويسة الحقول التي يجوز للشيفرة قراءتها في رد CORS فوق القائمة الآمنة. [1] نفترض تحقق بقية شروط CORS؛ لا تكفي رؤية اسم الحقل في الرد لإثبات قراءته.
- تتيح Access-Control-Expose-Headers حقولا إضافية فوق القائمة الآمنة للشيفرة في رد CORS. [1] وجود الحقل وحده مختلف عن إظهاره للبرنامج.
- في بطاقتنا X-Edition حقل خارج القائمة الآمنة؛ إدراج اسمه صراحة يفسر إتاحته، مع افتراض تحقق بقية شروط CORS. لم ننفذ قراءة.
- النجمة تعمم فقط دون بيانات اعتماد؛ معها تعامل اسما حرفيا لا رمزا عاما. [1] لذلك لا نستنتج إتاحة X-Edition من النجمة في الفرع المعتمد.
- عدم إتاحة حقل للشيفرة لا يثبت غيابه من الرد أو بطلان قيمته؛ يذكر المساعد ما عرفه عن الرد وما تسمح به القاعدة، دون تخمين قيمة مخفية.
أي قارئ يقصده السؤال؟
تشرح MDN أن الترويسة تحدد حقول الرد المتاحة للشيفرة عبر CORS، ولا يتاح افتراضيا إلا ما في القائمة الآمنة. [1]
السؤال إذن عن قارئ برمجي في صفحة، لا عن شخص ينظر إلى وصف مكتوب للرد. قد تعرض ورقة العمل اسم حقل وقيمته كاملة، بينما لا تسمح قواعد السيناريو للشيفرة المعنية بقراءته. ننسب كل معلومة إلى سياقها.
نثبت في التمرين أن الاتصال بين مصدرين وأن بقية شروط CORS مستوفاة. لا نستعمل هذا الحقل بديلا من جميع شروط الاتصال أو إذنا عاما لكل برنامج؛ الغرض تحديد حدود إظهار الترويسات فقط.
كيف نفسر اسم حقل صريح؟
نؤلف ردا يحمل X-Edition وقيمته r2، ونعلن أن الحقل خارج القائمة الآمنة. في البطاقة أ تسمي ترويسة الإظهار X-Edition صراحة. تحت شروطنا، لهذا الاسم دور في إتاحة الحقل للشيفرة.
في البطاقة ب لا يوجد إدراج إضافي له. ما زلنا نعرف من ورقتنا أن الرد يحمله، لكن لا نعلن أن البرنامج قرأه. الفرق لا يمحو قيمة r2 من الوصف، ولا يثبت نجاح اتصال فعلي.
يسجل المساعد خانتين مستقلتين بدلا من دمجهما في عبارة «الترويسة متاحة». الأولى تقول ما تحمله بطاقة الرد، والثانية تقول ما يسمح به العقد البرمجي المفترض.
| البطاقة | الحقل في الرد المؤلف | إظهار اسمه صراحة |
|---|---|---|
| أ | X-Edition بقيمة r2 | نعم |
| ب | X-Edition بقيمة r2 | لا |
متى تختلف النجمة؟
تعمل النجمة رمزا عاما للطلبات دون بيانات اعتماد؛ أما مع بيانات الاعتماد فتعامل اسم ترويسة حرفيا. [1]
نؤلف بطاقة ج تحمل النجمة مع فرع بيانات اعتماد معلن. لا نكتب أن هذا الفرع أتاح X-Edition كله؛ النجمة هنا لا تعطي معنى التعميم الذي اخترناه في الفرع الآخر. نحتفظ بشرط الاعتماد بجانب الحقل بدل إسقاطه من الملخص.
ولا نفترض أن قيم بيانات الاعتماد أو هويتها معروفة لنا. يكفينا وصف الفرع الذي يحتاجه تفسير النجمة؛ لا نعالج حسابا أو نستنتج صلاحيات مستخدم.
كيف يصوغ المساعد حد النتيجة؟
إذا لم يستطع قارئ برمجي الوصول إلى الحقل في مادة أخرى، فلا يكفي ذلك للحكم بأن الخادم لم يرسله. وإذا عرف المساعد القيمة من ورقة وصف، فلا ينسبها إلى تنفيذ JavaScript لم يحدث.
نكتب في مثالنا أن البطاقة حملت r2 وأن قاعدة الإظهار كانت صريحة أو غائبة أو نجمة مشروطة. لا يتحول اسم الإصدار إلى إثبات لصحة محتوى أو تحديث نجح.
لم نجلب ردا أو نشغل صفحة. قيمة التمرين أن يفصل المساعد بين وجود الترويسة، وإتاحة قراءتها لقارئ محدد، ومشاهدة نتيجة تنفيذ؛ لكل منها مادة مختلفة لا تقوم الأخرى مقامها.
المصادر ومتابعة القراءة
- MDN: Access-Control-Expose-Headers (يفتح في نافذة جديدة)developer.mozilla.org
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
