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

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

المشكلة

يتعذّر طلب بيانات من واجهة برمجة التطبيقات من بوابة المطوّرين المدمجة مع 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. إذا كانت الإجابة بنعم، بعد ذلك، تحقَّق مما إذا تم تنفيذ سياسة AssignMessage CORS أم لا خلال مسار الاستجابة للخطأ.
    2. إذا لم يكن الأمر كذلك، هذا هو سبب هذه المشكلة.
      وذلك لأنه عند تعذُّر تنفيذ أي سياسة مع العنصر continueOnError="false"، يدخل الطلب في مسار الاستجابة للخطأ. إذا لم يتم رصد أي أخطاء بشكل واضح في مسار الاستجابة للخطأ، تتم إعادة إرسال الاستجابة التلقائية للخطأ المقابلة للسياسة. لا تتضمّن استجابة الخطأ هذه أي عناوين CORS. نتيجةً لذلك، يتعذّر طلب بيانات من واجهة برمجة التطبيقات من بوابة المطوّرين المدمجة مع Unknown error.

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

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

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

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

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

درجة الدقّة

  1. بدلاً من الاعتماد على رسالة الخطأ التلقائية، يجب تنفيذ قاعدة خطأ لمعالجة الاستجابة للخطأ. ضمِّن سياسة AssignMessage CORS مع العناوين المناسبة واستدعِها في FaultRule.
  2. في بعض الأحيان، قد لا يكون من الممكن تحديد قاعدة خطأ لكل خطأ، وبالتالي، يمكن تنفيذ قاعدة خطأ تلقائية لتنفيذ سياسة AssignMessage CORS:
<?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 في التتبّع تبدو كما يلي:
    *,*
    ، هذا يعني أنّه يتم ضبط قيمتها على كلٍّ من الخادم الهدف وسياسة AssignMessage CORS.
  4. قد يحدث ذلك عندما يستخدم المستخدم <Add> element لسياسة Access-Control-Allow-Origin في إحدى السياسات، أو عندما تضبط الخلفية نفسها قيمًا متعدّدة.

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

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

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

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

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

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

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

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

درجة الدقّة

  1. والنهج المقترَح هو استخدام <Set> element (بدلاً من <Add> element) لـ Access-Control-Allow-Origin لأنّه يُسمح باستخدام قيمة واحدة فقط.
  2. ويمكنك بدلاً من ذلك ضبط العنوان Access-Control-Allow-Origin في مكان واحد فقط، إمّا سياسة AssignMessage CORS أو الخادم الهدف.
<?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 المُستخدَم لإعادة إظهار الخطأ
  • ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات
  • إكمال إخراج الاستجابة من الخادم الهدف/الخلفية مع حجم الحمولة