فاحص CORS

بمساعدة الخادم الويب

تحقق مما إذا كانت واجهة API تسمح بأصل وطريقة وترويسات معيّنة. تُرسل الأداة طلبات OPTIONS والطلبات الفعلية عبر فاحص آمن على جانب الخادم وتشرح لماذا سيسمح المتصفح بالاستدعاء أو يحظره.

الخصوصية: تتم المعالجة في متصفحك حيثما أمكن. تُمرَّر فحوصات الشبكة عبر خادم متقن ولا تُحفظ.
جارٍ تحميل الأداة…

كيفية استخدام فاحص CORS

  1. أدخل عنوان URL العام لواجهة API وأصل تطبيق الويب الذي سيستدعيها.
  2. اختر الطريقة واذكر ترويسات الطلب التي سيرسلها التطبيق (Authorization وContent-Type…).
  3. شغّل الاختبار واقرأ الحكم؛ تحدّد قائمة «السبب» بالضبط الترويسة التي ستجعل المتصفح يحظر الطلب.
  4. أصلح إعدادات الخادم وأعد التشغيل حتى يصبح الحكم «مسموح».

مزايا فاحص CORS

  • يرسل طلباً تمهيدياً (OPTIONS) ثم الطلب الفعلي بالأصل (Origin) والطريقة وترويسات الطلب التي تختارها
  • حكم مشروح خطوة بخطوة: تطابق الأصل، وبيانات الاعتماد، والطرق والترويسات المسموح بها، وحالة الطلب التمهيدي، وmax-age
  • يكشف متى يلزم طلب تمهيدي وفق قواعد القائمة الآمنة في CORS
  • جداول لترويسات استجابة الطلب التمهيدي والطلب الفعلي مع الشروحات
  • يحذّر من حرف البدل (*) مع بيانات الاعتماد، وغياب Vary: Origin، والأصول «null»

مثال على فاحص CORS

اختبار طلب POST مع بيانات الاعتماد

الإدخال:

URL: https://api.example.com/v1/orders · Origin: https://app.example.com · Method: POST · Headers: Authorization, Content-Type

النتيجة:

Result: Blocked
Preflight needed: Yes (OPTIONS) · Preflight status: 204
Access-Control-Allow-Origin is "*" but the request is credentialed; browsers reject the wildcard with credentials.
Access-Control-Allow-Headers does not list: Authorization.

الأسئلة الشائعة حول فاحص CORS

متى يرسل المتصفح طلباً تمهيدياً؟

لأي طريقة غير GET وHEAD وPOST، ولترويسات الطلب الخارجة عن القائمة الآمنة في CORS (Accept وAccept-Language وContent-Language وContent-Type بقيم النماذج أو النصوص)، ولقيم Content-Type مثل application/json. تخبرك الأداة ما إذا كانت تركيبتك تستدعي إرسال OPTIONS.

لماذا يُحظر طلبي رغم أن Access-Control-Allow-Origin يساوي *؟

يُرفض حرف البدل عندما يستخدم الطلب بيانات الاعتماد (ملفات تعريف الارتباط أو Authorization مع credentials: "include"). أعد بدلاً من ذلك الأصل نفسه بالضبط، وأضف Access-Control-Allow-Credentials: true وVary: Origin.

لماذا تستدعي الأداة واجهة API من خادم بدلاً من متصفحي؟

يخفي المتصفح الاستجابة المحظورة، فلن ترى سوى خطأ عام. ينفّذ المرحّل (relay) طلب OPTIONS والطلب الفعلي بترويسة Origin التي اخترتها ويعيد ترويسات Access-Control-* الخام حتى يمكن شرح الحكم.

هل يمكنني اختبار localhost أو واجهة API داخلية؟

لا. يرفض المرحّل العناوين الخاصة وعناوين الاسترجاع (loopback) وعناوين الارتباط المحلي (link-local) لأسباب أمنية. اعرض واجهة API عبر نفق (مثل مضيف تجريبي عام) لاختبارها.

ملاحظات تقنية

يعيد المرحّل إنتاج خوارزمية المتصفح وفق معيار Fetch: يُرسل الطلب التمهيدي مع Access-Control-Request-Method وAccess-Control-Request-Headers، ويُرسل الطلب الفعلي مع ترويسة Origin. ويُدمج حكم جانب الخادم مع إعادة تقييم محلية بحيث يُوضَّح كل سبب صراحةً، بما في ذلك الحالات التي يعدّها المرحّل مسموحاً بها لكنها تفشل مع الطلبات ذات بيانات الاعتماد.