حدث خطأ غير معروف في لوحة تجربة واجهة برمجة التطبيقات هذه

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

المشكلة

يتعذّر تنفيذ طلب البيانات من واجهة برمجة التطبيقات من خلال بوابة مخصّصة للمطوّرين المدمجة، ويظهر الخطأ Unknown Error أو ردّ فارغ في لوحة تجربة واجهة برمجة التطبيقات هذه.

رسائل الخطأ

قد يظهر ردّ فارغ أو رسالة الخطأ التالية لطلبات واجهة برمجة التطبيقات في البوابة المدمجة:

Unknown Error

في علامة التبويب أدوات المطوّرين > وحدة التحكّم، سيظهر لك الخطأ التالي:

Access to XMLHTTPRequest at 'API_URL' from origin 'URL_of_Integrated_DevPortal'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is
present on the requested resource.

في ما يلي رسالة خطأ عامة كما تظهر في علامة التبويب "أدوات المطوّرين" > "وحدة التحكّم":

رسالة خطأ عامة، انقر لعرض صورة أكبر رسالة خطأ عامة

الأسباب المحتملة

السبب الوصف تعليمات تحديد المشاكل وحلّها التي تنطبق على
خطأ في السياسة لم تتم معالجته يتم إرسال استجابة الخطأ التلقائية بدون عناوين CORS، وذلك عندما تفشل أي سياسة في مسار وقت التشغيل لطلب بيانات من واجهة برمجة التطبيقات. مستخدمو Edge Public Cloud
قيم متعدّدة لعنوان Access-Control-Allow-Origin استخدام "إضافة" بدلاً من "ضبط" في "تعيين سياسة الرسائل" مستخدمو Edge Public Cloud

السبب: خطأ في السياسة لم تتم معالجته

التشخيص

  1. تأكَّد من أنّ المشكلة تحدث فقط إذا كان من المتوقّع تلقّي استجابة غير 2XX.
  2. بالنسبة إلى الطلبات التي تعذّر تنفيذها، تحقَّق من توفّر سياسات في مسار الخادم الوكيل.
  3. تتبُّع الطلب والتحقّق مما إذا كانت إحدى السياسات التي تتضمّن continueOnError="false" قد تعذّر تنفيذها وأدّت إلى حدوث خطأ
    1. إذا كانت الإجابة بنعم، تحقَّق مما إذا تم تنفيذ سياسة CORS الخاصة بـ AssignMessage في مسار استجابة الخطأ أم لا.
    2. إذا لم يكن كذلك، فهذا هو سبب المشكلة.
      يرجع ذلك إلى أنّه عند تعذّر تنفيذ أي سياسة تتضمّن العنصر continueOnError="false"، ينتقل الطلب إلى مسار استجابة الخطأ. إذا لم تكن هناك أي معالجة صريحة للأخطاء في مسار الردود التي تتضمّن أخطاء، سيتم إرسال الرد التلقائي الذي يتضمّن الخطأ والمطابق للسياسة. لا تتضمّن استجابة الخطأ هذه أي عناوين CORS. نتيجةً لذلك، يتعذّر تنفيذ طلب البيانات من واجهة برمجة التطبيقات من بوابة المطوّرين المدمجة ويظهر الخطأ Unknown error.

تعرض لقطات الشاشة التالية مثالاً على رسالة خطأ ومثالاً على رسالة نجاح.

مثال على رسالة الخطأ في لوحة تجربة واجهة برمجة التطبيقات هذه المدمجة في البوابة وفي نافذة التتبُّع الخاصة بالخادم الوكيل:

مثال على رسالة الخطأ، انقر لعرض صورة أكبر مثال على رسالة الخطأ

مثال على رسالة النجاح في لوحة تجربة واجهة برمجة التطبيقات هذه ضمن البوابة المدمجة وفي نافذة التتبُّع الخاصة بالخادم الوكيل:

مثال على رسالة النجاح، انقر للحصول على صورة أكبر مثال على رسالة النجاح

الدقة

  1. بدلاً من الاعتماد على رسالة الخطأ التلقائية، يجب تنفيذ قاعدة خطأ للتعامل مع استجابة الخطأ. تضمين سياسة AssignMessage CORS مع العناوين المناسبة واستدعاؤها في FaultRule
  2. في بعض الأحيان، قد لا يكون من الممكن تحديد قاعدة خطأ لكل خطأ، وبالتالي، يمكن تنفيذ قاعدة خطأ تلقائية لتنفيذ سياسة CORS الخاصة بـ AssignMessage:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="proxy-endpoint-name">
    <Description/>
    <!-- Add a default fault rule to add CORS -->
    <DefaultFaultRule name="fault-rule">
        <Step>
            <Name>add-cors</Name>
        </Step>
    </DefaultFaultRule>
    <FaultRules/>
    <!--
    <Flows />
    Rest of the proxy definition
    -->
</ProxyEndpoint>

السبب: قيم متعدّدة لـ Access-Control-Allow-Origin

التشخيص

  1. تحقَّق من قيمة العنوان Access-Control-Allow-Origin في جلسة تتبُّع.
  2. يسمح عنوان Access-Control-Allow-Origin بتحديد قيمة واحدة فقط. قد يؤدي ضبط أكثر من قيمة واحدة إلى حدوث مشكلة في CORS، ولن تتمكّن بوابة مخصّصة للمطوّرين من عرض أي ردود.
  3. إذا كانت قيمة العنوان Access-Control-Allow-Origin في التتبُّع تبدو على النحو التالي:
    *,*
    ، يعني ذلك أنّ كلّاً من الخادم المستهدف وسياسة CORS الخاصة بـ AssignMessage يضبطان قيمته.
  4. قد يحدث ذلك عندما يستخدم المستخدم <Add> element في Access-Control-Allow-Origin ضمن إحدى السياسات، أو عندما يضبط الخلفية نفسها قيمًا متعدّدة.

مثال على Access-Control-Allow-Origin يساوي *,*:

مثال على استخدام قيم متعددة، انقر للحصول على صورة أكبر مثال على القيم المتعدّدة المستخدَمة

مثال على Access-Control-Allow-Origin يساوي *:

مثال على قيمة واحدة مستخدَمة، انقر لعرض صورة أكبر مثال على قيمة واحدة مستخدَمة

مثال باستخدام <Add>:

مثال باستخدام &quot;إضافة&quot;، انقر لعرض صورة أكبر مثال على استخدام Add

مثال باستخدام <Set>:

مثال باستخدام Set، انقر للحصول على صورة أكبر مثال باستخدام Set

الدقة

  1. الطريقة المقترَحة هي استخدام <Set> element (بدلاً من <Add> element) في Access-Control-Allow-Origin لأنّه يُسمح بقيمة واحدة فقط.
  2. بدلاً من ذلك، اضبط العنوان Access-Control-Allow-Origin في مكان واحد فقط، إما في سياسة CORS الخاصة بـ AssignMessage أو في الخادم المستهدف.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="set-cors">
    <DisplayName>Set CORS</DisplayName>
    <FaultRules/>
    <Properties/>
    <Set>
        <Headers>
            <Header name="Access-Control-Allow-Origin">*</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

إذا كنت لا تزال بحاجة إلى أي مساعدة من فريق دعم Apigee، انتقِل إلى المعلومات التشخيصية التي يجب جمعها.

يجب جمع معلومات التشخيص

اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge:

  • اسم المؤسسة
  • اسم البيئة
  • اسم خادم وكيل لواجهة برمجة التطبيقات
  • أكمل أمر curl المستخدَم لإعادة إنتاج الخطأ
  • ملف التتبُّع لطلبات البيانات من واجهة برمجة التطبيقات
  • الناتج الكامل للاستجابة من الخادم المستهدف/الخادم الخلفي، بالإضافة إلى حجم الحمولة