فهم CORS وحل مشاكل API بسهولة

x32x01
  • بواسطة x32x01 ||
أخيرًا فهمت يعني إيه CORS! 🔥💻
أكيد مرة قابلت الرسالة دي وانت شغال على API أو مشروع ويب:
"CORS error" 😤
الموضوع ده ممكن يكون محبط جدًا لو مش فاهم هو بيعمل كده ليه!

البوست ده هيفهمك كل حاجة عن CORS، إزاي بيشتغل، مين اللي بينفذه، وليه موجود أساسًا، وكل التفاصيل اللي محتاج تعرفها علشان متعصبش تاني 😎.

تخيل السيناريو ده 👀

أنت داخل على موقع البنك بتاعك bank.com، عملت Login، والمتصفح حفظلك Session Cookie.

الكوكي ده زي بطاقة تعريف بتاعتك، أي طلب بعد كده من جهازك للبنك هيعرف إنك إنت صاحب الحساب ✅.

بعد شوية فتحت الإيميل ولقيت رسالة غريبة فيها لينك… فضولك خلاك تدوس عليه، واللينك ودّاك على attack.com.

الموقع ده في الخلفية حاول يبعت طلب لـ bank.com عشان يجيب بياناتك البنكية. الكارثة؟ البنك ممكن يدي البيانات عادي لأنه شايف الكوكيز بتقول إنه إنت داخل 😱.

هنا ظهر SOP (Same-Origin Policy) 🌐.



إيه هو Same-Origin Policy (SOP)؟ 🛡️

SOP معناها ببساطة:
أي طلب من موقع لموقع تاني مختلف في البروتوكول، الدومين، أو البورت، هيترفض تلقائيًا.

ده قانون من المتصفحات لحمايتك من هجمات زي CSRF.
لكن المشكلة؟ لو انت Developer، محتاج تجيب بيانات من مواقع تانية أو APIs عامة، SOP هنا هيقفلك الباب خالص 😅.



وهنا ظهر موضوع CORS 🎯

CORS اختصار Cross-Origin Resource Sharing.
لو example.com حاول يجيب بيانات من bank.com، المتصفح بيبعت Header اسمه Origin بيقول:

"الطلب ده جاي منين؟"
لو البنك شايف إن example.com موثوق أو البيانات عامة، بيرد بـ Header:
Code:
Access-Control-Allow-Origin: http://example.com
أو يحط * لو عايز يفتح لكل المواقع.

المتصفح بعد كده بيقرر:
  • لو الرد مناسب → يكمل الطلب ✅
  • لو مش مناسب → يوقف الطلب ويطلعلك CORS Error ❌



إيه حكاية Preflight Request؟ ✈️

في طلبات معينة زي PUT, DELETE أو لو فيها Headers خاصة، المتصفح مش هيبعتها على طول.
بيعمل حاجة اسمها Preflight Request:
  • Request من نوع OPTIONS بيسأل السيرفر:
"هو مسموح أعمل الطلب ده؟"​
  • السيرفر لو وافق بيرجع Headers زي:
Code:
Access-Control-Allow-Methods: PUT, GET, POST, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
  • لو كل حاجة تمام → المتصفح يبعت الطلب الأصلي.
  • لو لا → المتصفح يوقف الطلب ويطلع CORS Error 🚫.



CORS مش أداة سيرفر! ⚠️

الفرق المهم:
  • CORS Policy من المتصفح، هدفه حماية المستخدم من المواقع اللي بتحاول تسرق بياناته.
  • السيرفر محتاج يتجهز عشان يتعامل مع CORS، سواء بـ Headers أو إعدادات السيرفر.



مثال عملي لتفعيل CORS على السيرفر 🖥️


لو عندك Node.js + Express، ممكن تستخدم مكتبة جاهزة:
Python:
const express = require('express');
const cors = require('cors');

const app = express();

// السماح لموقع معين
app.use(cors({
  origin: 'http://example.com'
}));

app.get('/data', (req, res) => {
  res.json({ message: "ده مثال لبيانات CORS" });
});

app.listen(3000, () => console.log('Server running على 3000'));

لو حابب تفتح لكل المواقع:
Python:
app.use(cors({ origin: '*' }));



ليه لازم نفهم CORS؟ 💡

  • حماية البيانات: يمنع المواقع الغريبة من الوصول للكوكيز والبيانات الحساسة.
  • سهولة التعامل مع APIs: لو متفهمش CORS، ممكن تقفلك كتير من المشاريع.
  • Preflight Request مهم لطلبات حساسة زي PUT و DELETE.



نصائح لتجنب مشاكل CORS 🛠️

  1. دايمًا حدد Origin بدل * لو ممكن، لتقليل المخاطر.
  2. استخدم مكتبات جاهزة لتفعيل CORS على السيرفر.
  3. افهم طلبات Preflight ومتى بتظهر.
  4. خليك حريص وأنت شغال على بيانات حساسة.



الخلاصة 📝

  • CORS موجود لحمايتك من المواقع اللي بتحاول تسرق البيانات.
  • هو Policy من المتصفح مش السيرفر.
  • Preflight Requests تحميك في الطلبات الحساسة.
  • السيرفر محتاج يتجهز بـ Headers صح عشان الطلبات تمشي.
  • دايمًا افهم الفرق بين SOP وCORS وانت بتشتغل على APIs 🌟.
إيه أكتر موقف CORS عطلك وانت شغال على Web Projects؟ شاركني تجربتك تحت 👇
565656.jpg
 
التعديل الأخير:
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
623
x32x01
x32x01
x32x01
الردود
0
المشاهدات
574
x32x01
x32x01
x32x01
الردود
0
المشاهدات
680
x32x01
x32x01
x32x01
الردود
0
المشاهدات
550
x32x01
x32x01
x32x01
الردود
0
المشاهدات
795
x32x01
x32x01
x32x01
الردود
0
المشاهدات
170
x32x01
x32x01
x32x01
الردود
0
المشاهدات
661
x32x01
x32x01
x32x01
الردود
0
المشاهدات
583
x32x01
x32x01
x32x01
الردود
0
المشاهدات
646
x32x01
x32x01
x32x01
  • x32x01
الردود
0
المشاهدات
819
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,829
المشاركات
2,027
أعضاء أكتب كود
468
أخر عضو
عبدالله احمد
عودة
أعلى