CORS و CSP كلاهما يظهران في Console عند منع سلوك، لكنهما يحلان مشكلتين مختلفتين. CORS يحدد متى يسمح المتصفح لصفحة بقراءة استجابة من Origin آخر، بينما CSP سياسة يرسلها الموقع لتقييد مصادر Scripts و Styles و Frames واتصالات وغيرها.
CORS يتعلق بطلبات cross-origin
الخادم يحدد Access-Control-Allow-Origin وغيرها. الطلب قد يصل للخادم لكن JavaScript لا يستطيع قراءة الرد إذا لم تسمح السياسة.
CSP تقيد ما يمكن للصفحة تحميله أو تنفيذه
سياسة مثل script-src أو connect-src قد تمنع Script أو اتصالًا حتى قبل أن تدخل CORS في الصورة.
خطوات عملية
- اقرأ رسالة Console.
- حدد هل الخطأ CORS أم CSP.
- افحص Response headers.
- اختبر الطلب خارج الصفحة عند الحاجة.
- لا تعطل الحماية كحل دائم.
Extensions لها سياق مختلف
Extension permissions و host permissions قد تسمح بطلبات لا تستطيع الصفحة العادية تنفيذها، لكن Content Script نفسه يعمل قرب سياق الصفحة وقد يخضع لقيود مختلفة.
قائمة مراجعة
- Origin معروف.
- Preflight مفحوص.
- CSP directives مفهومة.
- Extension permissions محددة.
- الحل لا يوسع الصلاحيات بلا حاجة.
أصلح المصدر الصحيح
لو المشكلة CORS عدل API أو استخدم Backend موثوقًا. لو CSP، راجع السياسة أو طريقة تضمين الموارد. تغيير Headers عشوائيًا يخفي السبب.
سيناريو تطبيقي قبل الاعتماد
ابدأ من Request أو API contract قابل لإعادة الإنتاج. ثبّت المدخلات، ثم غيّر عنصرًا واحدًا مثل Header أو Body أو Permission حتى تعرف أثره الحقيقي. في موضوع «CORS vs CSP: الفرق وتأثيره على أدوات المتصفح»، نفّذ تجربة صغيرة قبل تعميم القرار. ابدأ ب ـ1- اقرأ رسالة Console.، 2- حدد هل الخطأ CORS أم CSP.، 3- افحص Response headers.، ثم سجل النتيجة قبل توسيع النطاق. لا تحاول تحسين كل شيء في أول Run؛ المطلوب أولًا إنشاء حالة مرجعية تستطيع العودة إليها ومقارنتها. عندما تنجح التجربة، كررها مرة ثانية بنفس الشروط للتأكد أن النتيجة لم تكن صدفة أو أثر Cache أو حالة مؤقتة.
كيف تقيس نجاح التجربة؟
راقب status و duration و headers وال ـbody أو schema، وسجل حالات الخطأ بنفس العناية التي تسجل بها النجاح. أدوات المطور الجيدة تجعل الفرق بين تجربتين واضحًا. حوّل النقاط الموجودة في المقال إلى مؤشرات قابلة للرصد: CORS حماية متصفح لا Firewall.؛ Preflight يستخدم OPTIONS.؛ Credentials تحتاج إعدادًا صريحًا.. احتفظ بالقياسات مع timestamp ونسخة التطبيق أو البيئة، لأن مقارنة أرقام من إصدارات أو شروط مختلفة قد تعطي استنتاجًا خاطئًا. وإذا كانت النتيجة رقمية، استخدم أكثر من عينة بدل أفضل أو أسوأ قيمة منفردة.
عند الفشل: ماذا تراجع أولًا؟
إذا فشل الطلب، افصل طبقات المشكلة: DNS/connection، TLS، HTTP، CORS/CSP، authentication، ثم validation. خلط الطبقات يؤدي إلى حلول واسعة وغير آمنة. عند التحقيق استخدم هذه القائمة كحد أدنى: Origin معروف.؛ Preflight مفحوص.؛ CSP directives مفهومة.؛ Extension permissions محددة.. سجل ما الذي جربته وما الذي لم يتغير بعد التجربة. هذه المعلومة تمنع الفريق من إعادة نفس المحاولات وتساعد على تحديد ما إذا كان الخطأ في الإعداد أو الأداة أو الشبكة أو بيانات المهمة.
متى تعتمد القرار على نطاق أوسع؟
قرار الاعتماد لا يجب أن يعتمد على أن التجربة «عملت مرة». في «CORS vs CSP: الفرق وتأثيره على أدوات المتصفح» اعتبر الحل جاهزًا عندما تستطيع إعادة نفس السيناريو بنتيجة متقاربة، ويفهم شخص آخر خطوات الاختبار وحدود النتيجة، وتعرف ماذا ستفعل لو فشلت الحالة الطبيعية. لو لم تتحقق هذه الشروط، احتفظ بالحل كتجربة أو إعداد مبدئي ولا تحوله إلى Default لكل الحسابات أو المهام.
شارك في تقييم ونقاش المقال
رأيك يضيف قيمة للمقال ويساعدنا على تحسين المحتوى والنقاش حوله.
النقاش
جارٍ تحميل التعليقات…