تكرار السؤال: …
الإجابة المختصرة
الـ CORS هي آلية أمان تطبقها المتصفحات لمنع مواقع خبيثة من قراءة بيانات موقعك، ويرسل المتصفح طلب Preflight استطلاعي بنوع OPTIONS للتأكد من موافقة السيرفر قبل إرسال الطلبات المعدلة أو المعقدة.
الشرح
سياسة الأصل الواحد (Same-Origin Policy - SOP) تمنع السكريبت من نطاق foo.com من قراءة استجابة api.bar.com. إذا كان الطلب معقداً (يستخدم PUT/DELETE، أو ترويسات مخصصة مثل Authorization، أو Content-Type غير تقليدي مثل application/json)، يرسل المتصفح أولاً طلب OPTIONS يحتوي على Access-Control-Request-Method. إذا رد الخادم بترويسات قبول متوافقة (Access-Control-Allow-Origin)، يرسل المتصفح الطلب الفعلي، وإلا يمنعه ويرمي خطأ في الكونسول.
مثال بالكود
// استجابة السيرفر المسموح بها:
Access-Control-Allow-Origin: https://myapp.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization, Content-Typeأخطاء شائعة
- وضع Access-Control-Allow-Origin: * جنباً إلى جنب مع السماح بملفات تعريف الارتباط credentials: true، وهو أمر يحظره المتصفح تماماً لأسباب أمنية.