أداة اختبار CORS

التالي

أخطاء CORS هي وحدة تحكم المتصفح “الكلاسيكية” باللون الأحمر: تضغط على واجهة برمجة التطبيقات من أصل مختلف ويحظر المتصفح الاستجابة. يرسل هذا المختبر طلب OPTIONS للاختبار المبدئي إلى أي عنوان URL تلصقه، مع الأصل والأسلوب اللذين تختارهما، ثم يقوم بفك تشفير رؤوس Access-Control-* حتى تتمكن من رؤية ما يسمح به الخادم بالضبط، وما الذي يحظره، ولماذا يشكو المتصفح.

كيفية اختبار CORS

  1. 1

    أدخل عنوان URL المستهدف

    نقطة نهاية API التي تريد الاتصال بها من الواجهة الأمامية. تضمين سلسلة الاستعلام والبروتوكول.

  2. 2

    ضبط الطريقة والأصل

    GET/POST/PUT/DELETE/PATCH. يمكن أن يكون الأصل هو عنوان URL لموقعك أو أي أصل تريد محاكاته.

  3. 3

    فهم الاختبار المبدئي

    يرسل المختبر دائمًا طلب OPTIONS مع الأصل والأسلوب اللذين اخترتهما، بالإضافة إلى رأس Access-Control-Request-Headers: Content-Type، وهو بالضبط الاختبار المبدئي الذي يرسله المتصفح قبل طلب JSON.

  4. 4

    قم بإجراء الاختبار

    يرسل المختبر الاختبار المبدئي ويبلغ عن حالة HTTP ورؤوس الاستجابة المتعلقة بـ CORS: Allow-Origin وAllow-Methods وAllow-Headers وAllow-Credentials وMax-Age.

  5. 5

    إصلاح التكوين الخاطئ

    يشير التقرير إلى ما هو مفقود أو خاطئ - "الأصل المسموح به" المفقود، والرأس المحظور، والطريقة غير مسموح بها.

العناوين المهمة

الرأس وظيفته
Access-Control-Allow-Origin أي أصول يُسمح لها بقراءة الاستجابة
Access-Control-Allow-Methods الاختبار المبدئي: ما هي الطرق المسموح بها
Access-Control-Allow-Headers الاختبار المبدئي: ما هي رؤوس الطلب المسموح بها
Access-Control-Allow-Credentials ما إذا كان مسموحًا بملفات تعريف الارتباط/المصادقة
Access-Control-Expose-Headers ما هي رؤوس الاستجابة التي يمكن لـ JS قراءتها
Access-Control-Max-Age مدة تخزين نتيجة الاختبار المبدئي مؤقتًا

الطلبات البسيطة مقابل الطلبات المعدة مسبقًا

يكون الطلب “بسيطًا” (بدون اختبار مبدئي) فقط إذا كانت جميع هذه الشروط صحيحة:

  • الطريقة هي GET أو HEAD أو POST.
  • تقتصر الرؤوس على Accept وAccept-Language وContent-Language وContent-Type (بقيم محددة).
  • نوع المحتوى، إن وُجد، هو application/x-www-form-urlencoded أو multipart/form-data أو text/plain.

أي شيء آخر، نص JSON، أو رأس التفويض، أو رأس X-Foo المخصص، أو PUT/DELETE/PATCH، يؤدي إلى تشغيل خيارات الاختبار المبدئي. يجب أن تجيب الخوادم على الاختبار المبدئي باستخدام رؤوس السماح-* الصحيحة وإلا فلن يتم إطلاق الطلب الحقيقي أبدًا.

حالات فشل CORS الشائعة

  • “لا يوجد رأس Access-Control-Allow-Origin” → الخادم لا يقوم بتعيين الرأس. إصلاح في الخادم، وليس العميل.
  • “يتطلب وضع بيانات الاعتماد ألا يكون السماح بالأصل *” → إذا قمت بإرسال ملفات تعريف الارتباط، فيجب أن يكون Allow-Origin أصلًا محددًا (أو صدى رأس الأصل).
  • “طلب الرأس X غير مسموح به” → أضف X إلى Access-Control-Allow-Headers في استجابة الاختبار المبدئي.
  • “الطريقة غير مسموح بها” → أضف الطريقة إلى Access-Control-Allow-Methods.
  • “إعادة التوجيه غير مسموح بها في الاختبار المبدئي” → لا يمكن أن يتبع الاختبار المبدئي عمليات إعادة التوجيه. يجب أن تستجيب نقطة نهاية OPTIONS مباشرة.

السماح بالأصل: * مقابل صدى الأصل

Access-Control-Allow-Origin: * مسموح به ولكن لا يمكن دمجه مع بيانات الاعتماد. في مرحلة الإنتاج، قم بتكرار الطلب Origin مرة أخرى (بعد التحقق من صحته مقابل القائمة المسموح بها) وقم بتعيين Allow-Credentials: true إذا كنت بحاجة إلى ملفات تعريف الارتباط.

الوكيل كحل بديل

إذا لم تتمكن من التحكم في الخادم، فإن الوكيل الرقيق الموجود على المجال الخاص بك يقوم بإزالة CORS بالكامل - يرى المتصفح نفس الأصل. تقدم العديد من منصات الاستضافة (Vercel، Netlify، Cloudflare) قواعد إعادة كتابة لهذا الغرض بالضبط.

الأسئلة الشائعة

لمنع صفحة ضارة من قراءة البيانات الخاصة على موقع آخر باستخدام ملفات تعريف الارتباط في متصفحك. بدون CORS، قد تسمح زيارة موقع evil.com بطلب واجهة برمجة التطبيقات الداخلية للبنك الذي تتعامل معه مثلك. تجبر CORS البنك على السماح صراحةً بالقراءات المشتركة الأصل.

فقط أثناء التطوير. يحتوي Chromium على علامة --disable-web-security ولكنها تؤثر على جميع المواقع وهي خطيرة. الإصلاح الصحيح هو الرؤوس من جانب الخادم أو الوكيل.

Postman ليس متصفحًا، فهو يتجاهل CORS تمامًا. يتم فرض CORS فقط بواسطة المتصفحات لطلبات JavaScript. الخادم الذي يعمل في Postman ليس صحيحًا تلقائيًا من خلال CORS.

يتم تحميل الصور وعلامات <script> الكلاسيكية عبر الأصل بدون CORS، لكن JS لا يمكنه قراءة محتوياتها. يقوم كل من <img crossorigin> وfetch() بفرض CORS، ولهذا السبب تصبح الصور المرسومة على عنصر canvas “ملوّثة” (tainted) بدونه.

أدوات ذات صلة

محلل رؤوس البريد الإلكتروني

حلّل رؤوس البريد الإلكتروني الخام بخصوصية داخل متصفحك، وراجع محطات Received والتوقيت وبيانات SPF وDKIM وDMARC وARC من دون رفع الرسالة.

ما هو عنوان IP الخاص بي

اعرض عنوان IP الذي استلمه هذا الخادم لطلبك، وما إذا كان IPv4 أو IPv6، وبلدًا تقريبيًا عندما تتوفر بيانات GeoIP محلية.

اختبار السرعة

أجرِ اختبار سرعة إنترنت سريعًا ومجانيًا من المتصفح. قِس سرعة التنزيل بوحدة ميغابت في الثانية إضافةً إلى زمن الاستجابة والتذبذب، واعرف ما إذا كان اتصالك جاهزًا للبثّ بدقة 4K والألعاب ومكالمات الفيديو. دون تطبيق ودون تسجيل.

بحث DNS عكسي

ابحث عن سجل PTR لعنوان IPv4 أو IPv6. مفيد لتشخيص خوادم البريد، وتحليل السجلات، والتحقيق في مرشحات الرسائل غير المرغوب فيها.

البحث عن عنوان IP

ابحث عن أي عنوان IPv4 أو IPv6 عام لمعرفة الدولة والمنطقة والمدينة والإحداثيات ومزود الخدمة و ASN والمؤسسة والمنطقة الزمنية بشكل تقريبي.

استعلام DNS

استعلم عن سجلات DNS من نوع A وAAAA وMX وTXT وNS وCNAME وSOA لأي نطاق دون فتح طرفية.