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

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

المشكلة

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

رسائل الخطأ

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

Unknown Error

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

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.

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

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

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

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

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

الدقة

  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;، انقر لعرض صورة أكبر مثال: استخدام &quot;إضافة&quot;

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

مثال: عند استخدام &quot;ضبط&quot;، انقر لعرض الصورة الأكبر. مثال باستخدام Set

الدقة

  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 المستخدَم لإعادة إنتاج الخطأ
  • ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات
  • إخراج الاستجابة من الخادم الهدف/الخلفية إلى جانب حجم الحمولة