مختبر طلبات CORS
أرسل طلباً حقيقياً عبر الأصول من متصفحك إلى أي API لمعرفة هل يسمح CORS به. يشرح متى يلزم preflight ويعرض الترويسات المقروءة.
ما هو مختبر CORS؟
يرسل مختبر CORS هذا طلباً حقيقياً عبر الأصول من متصفحك، بالطريقة وContent-Type والترويسة المخصصة ووضع بيانات الاعتماد التي تختارها، ويخبرك هل يسمح المتصفح لجافاسكربت بقراءة الاستجابة. وقبل الإرسال يشرح هل الطلب «بسيط» أم يحتاج preflight من نوع OPTIONS ولماذا.
كيفية استخدام مختبر CORS
- أدخل رابط API المراد اختباره.
- اختر الطريقة وContent-Type اختيارياً وترويسة مخصصة اختيارية مثل
Authorization: Bearer x. - فعّل «Send cookies / credentials» إن كان تطبيقك يستخدم credentials: include.
- اقرأ شرح preflight ثم اضغط Send test request.
- إن سُمح فراجع الحالة والترويسات التي يراها جافاسكربت؛ وإن حُظر فراجع وحدة تحكم المتصفح لمعرفة خطأ CORS بدقة.
متى تستخدم مختبر CORS
استخدمه لمعرفة هل يمكن استدعاء API عام من تطبيق متصفح أو لإعادة إنتاج خطأ CORS بترويسات محددة. الأصل دائماً https://algokit.dev، فالخادم الذي لا يسمح إلا بنطاقك سيظهر محجوباً بشكل صحيح؛ فاختبر من موقعك لمطابقة دقيقة. ولا يمكنه التمييز بين إخفاقات CORS وأخطاء الشبكة أو TLS لأن المتصفح لا يكشف ذلك.
كيف يعمل مختبر CORS
تستدعي الأداة fetch() مع mode: "cors" من أصل الصفحة (https://algokit.dev)، تماماً كما يفعل كود واجهتك الأمامية. يتبع شرح preflight معيار Fetch: الطرق غير GET/HEAD/POST أو Content-Type غير form-urlencoded وmultipart/form-data وtext/plain أو أي ترويسة مخصصة تؤدي إلى preflight من نوع OPTIONS. وعندما يحجب المتصفح استجابة يُطلق TypeError عاماً ويخفي السبب عمداً، لذا تطلب منك الأداة النظر في وحدة التحكم.
حالات الاستخدام الشائعة
- معرفة هل يرسل API لجهة خارجية Access-Control-Allow-Origin قبل دمجه في SPA.
- إيجاد الترويسة في طلبك التي تُطلق preflight.
- التحقق من أن credentials: include يعمل (ويتطلب أصلاً محدداً لا *).
- معرفة ترويسات الاستجابة المكشوفة لجافاسكربت عبر Access-Control-Expose-Headers.
ملاحظة أمنية
يذهب الطلب مباشرة من متصفحك إلى الرابط الذي تدخله؛ وعند تفعيل بيانات الاعتماد تُرسَل ملفات الارتباط الخاصة بذلك الموقع أيضاً.
الأسئلة الشائعة
لماذا يعمل curl ويفشل المتصفح؟
لا تفرض CORS إلا المتصفحات. يتجاهلها curl والخوادم، فقد يعمل API من curl ولا يمكن قراءته من صفحة ويب.
ما الذي يُطلق preflight؟
طريقة غير GET وHEAD وPOST، أو Content-Type غير بسيط مثل application/json، أو أي ترويسة طلب مخصصة مثل Authorization.
هل يمكن استخدام Access-Control-Allow-Origin: * مع ملفات الارتباط؟
لا. مع بيانات الاعتماد يجب أن يعيد الخادم الأصل المحدد نفسه ويرسل Access-Control-Allow-Credentials: true.