يتم الآن عرض مستندات 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 |
السبب: حدوث خطأ في السياسة لم تتم معالجته
التشخيص
- تحقَّق من أنّ المشكلة لا تحدث إلا في حال كان من المتوقّع تلقّي رد بغير
2XX
. - بالنسبة إلى الطلبات التي يتعذّر تنفيذها، تحقَّق من وجود سياسات في تدفق الخادم الوكيل.
-
تتبُّع الطلب والتحقّق مما إذا كان يتعذّر تطبيق السياسة التي تم ضبط
continueOnError="false"
عليها وتؤدي إلى حدوث خطأ. - إذا كانت الإجابة بنعم، بعد ذلك، تحقَّق مما إذا تم تنفيذ سياسة AssignMessage CORS أم لا خلال مسار الاستجابة للخطأ.
- إذا لم يكن الأمر كذلك، هذا هو سبب هذه المشكلة.
وذلك لأنه عند تعذُّر تنفيذ أي سياسة مع العنصرcontinueOnError="false"
، يدخل الطلب في مسار الاستجابة للخطأ. إذا لم يتم رصد أي أخطاء بشكل واضح في مسار الاستجابة للخطأ، تتم إعادة إرسال الاستجابة التلقائية للخطأ المقابلة للسياسة. لا تتضمّن استجابة الخطأ هذه أي عناوين CORS. نتيجةً لذلك، يتعذّر طلب بيانات من واجهة برمجة التطبيقات من بوابة المطوّرين المدمجة معUnknown error
.
تعرض لقطات الشاشة التالية مثالاً لرسالة خطأ ومثالاً على رسالة النجاح.
مثال على رسالة خطأ في لوحة تجربة واجهة برمجة التطبيقات هذه للبوابة المدمَجة وفي نافذة تتبُّع الخادم الوكيل:
مثال على رسالة نجاح في لوحة تجربة واجهة برمجة التطبيقات هذه للبوابة المدمَجة وفي نافذة تتبُّع الخادم الوكيل:
درجة الدقّة
- بدلاً من الاعتماد على رسالة الخطأ التلقائية، يجب تنفيذ قاعدة خطأ لمعالجة الاستجابة للخطأ. ضمِّن سياسة AssignMessage CORS مع العناوين المناسبة واستدعِها في FaultRule.
- في بعض الأحيان، قد لا يكون من الممكن تحديد قاعدة خطأ لكل خطأ، وبالتالي، يمكن تنفيذ قاعدة خطأ تلقائية لتنفيذ سياسة 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
التشخيص
- تحقَّق من قيمة العنوان Access-Control-Allow-Origin في جلسة تتبُّع.
- يسمح عنوان Access-Control-Allow-Origin بتعيين قيمة واحدة فقط. يمكن أن يؤدي ضبط أكثر من قيمة واحدة إلى حدوث مشكلة في سياسة مشاركة الموارد المتعددة المصادر (CORS) ولن تنجح بوابة مطوّري البرامج في عرض أي ردود.
- إذا كانت قيمة الرأس Access-Control-Allow-Origin في التتبّع تبدو كما يلي:
*,*
، هذا يعني أنّه يتم ضبط قيمتها على كلٍّ من الخادم الهدف وسياسة AssignMessage CORS. - قد يحدث ذلك عندما يستخدم المستخدم
<Add> element
لسياسة Access-Control-Allow-Origin في إحدى السياسات، أو عندما تضبط الخلفية نفسها قيمًا متعدّدة.
مثال على Access-Control-Allow-Origin يساوي *,*
:
مثال على Access-Control-Allow-Origin يساوي *
:
مثال باستخدام <Add>
:
مثال باستخدام <Set>
:
درجة الدقّة
- والنهج المقترَح هو استخدام
<Set> element
(بدلاً من<Add> element
) لـ Access-Control-Allow-Origin لأنّه يُسمح باستخدام قيمة واحدة فقط. - ويمكنك بدلاً من ذلك ضبط العنوان 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 المُستخدَم لإعادة إظهار الخطأ
- ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات
- إكمال إخراج الاستجابة من الخادم الهدف/الخلفية مع حجم الحمولة