CORS بلغة بسيطة#
لا تسمح المتصفحات افتراضيًا لشيفرة جافا سكريبت في موقع ما بقراءة الاستجابة لطلب أرسلته إلى نطاق آخر. تُسمى هذه القاعدة «سياسة المصدر الواحد»، وهدفها منع موقع خبيث من سحب بياناتك من موقع آخر مستخدمًا جلستك المفتوحة. أما CORS فهو الطريقة الرسمية التي يقول بها الخادم المقصود: «أثق بهذه المصادر، فاعرض لها الاستجابة».
مثال من الواقع#
لنفترض أن الواجهة الأمامية لموقعك على shop.example وواجهة API على api.example. عندما تطلب الصفحة بيانات من الواجهة عبر fetch، يتحقق المتصفح من وجود ترويسة مثل Access-Control-Allow-Origin: https://shop.example في الاستجابة. فإن لم توجد، قد يصل الطلب إلى الخادم، لكن المتصفح لن يسلّم الاستجابة لشيفرتك، وسترى خطأ CORS في وحدة التحكم.
وفي بعض الطلبات (مثل طريقة PUT أو الترويسات المخصصة) يرسل المتصفح أولًا طلب OPTIONS يُسمى الطلب التمهيدي (preflight) ليستأذن.
أين تصادفه#
- ربط الواجهة الأمامية بواجهة API على نطاق أو منفذ آخر، حتى على الجهاز المحلي
- استخدام خطوط أو واجهات API من خدمة خارجية
- بناء إضافة أو أداة تقرأ بيانات من موقع آخر
خطأ شائع#
للتخلص من الخطأ يفتح كثيرون الباب لجميع المصادر بعلامة *. هذا مقبول للبيانات العامة، لكنه خطير لواجهة تعمل بملفات تعريف الارتباط أو بيانات المستخدمين. الأفضل أن تسمح لنطاقاتك فقط. وتذكّر أن CORS يُضبط على الخادم لا في شيفرة الواجهة، وأن المتصفح وحده يطبقه، فهو ليس بديلًا عن المصادقة.