أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
المشكلة
يتلقّى تطبيق العميل رمز حالة HTTP 502 Bad Gateway مع رمز الخطأ protocol.http.Response405WithoutAllowHeader كاستجابة لطلبات البيانات من واجهة برمجة التطبيقات.
رسالة الخطأ
يتلقّى تطبيق العميل رمز الاستجابة التالي:
HTTP/1.1 502 Bad Gateway
بالإضافة إلى ذلك، قد تظهر لك رسالة الخطأ التالية:
{
"fault":{
"faultstring":"Received 405 Response without Allow Header",
"detail":{
"errorcode":"protocol.http.Response405WithoutAllowHeader"
}
}
}الأسباب المحتملة
يحدث هذا الخطأ إذا استجاب خادم الخلفية برمز الحالة 405 Method Not Allowed بدون العنوان Allow.
وفقًا للمواصفات
RFC 7231، القسم 6.5.5: 405 Method Not Allowed، من المتوقّع أن ينشئ خادم المصدر
حقل العنوان Allow ويرسله في استجابة 405 تتضمّن
قائمة بالطرق المتوافقة حاليًا مع المورد المستهدف. إذا لم يكن كذلك، ستردّ Apigee بالرمز 502 Bad Gateway ورمز الخطأ protocol.http.Response405WithoutAllowHeader.
| السبب | الوصف | تعليمات تحديد المشاكل وحلّها التي تنطبق على |
|---|---|---|
| الاستجابة 405 بدون عنوان Allow من خادم الخلفية | يستجيب خادم الخلفية الذي يعالج طلب بيانات من واجهة برمجة التطبيقات برمز الحالة 405 بدون رأس Allow. |
مستخدمو Edge Public Cloud وEdge Private Cloud |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات أو التقنيات التالية لتشخيص هذا الخطأ:
API Monitoring
لتشخيص الخطأ باستخدام "مراقبة واجهة برمجة التطبيقات"، اتّبِع الخطوات التالية:
- سجِّل الدخول إلى واجهة مستخدم Edge بصفتك مستخدمًا لديه دور مناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقِل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
- اختَر الفترة الزمنية المحدّدة التي لاحظت فيها الأخطاء.
رسم بياني لرمز الخطأ مقابل الوقت
اختَر الخلية التي تحتوي على رمز الخطأ
protocol.http.Response405WithoutAllowHeaderكما هو موضّح أدناه:
تظهر المعلومات حول رمز الخطأ
protocol.http.Response405WithoutAllowHeaderكما هو موضّح أدناه:
انقر على عرض السجلات ووسِّع أحد الطلبات التي تعذّر تنفيذها للاطّلاع على مزيد من المعلومات.
- من نافذة السجلّات، سجِّل التفاصيل التالية:
- رمز الحالة:
502 - مصدر الخطأ:
target - رمز الخطأ:
protocol.http.Response405WithoutAllowHeader
- رمز الحالة:
- إذا كان مصدر الخطأ هو
targetوكان رمز الخطأ هوprotocol.http.Response405WithoutAllowHeader، يشير ذلك إلى أنّ خادم الخلفية ردّ برمز الحالة405 Method Not Allowedبدون العنوانAllow.
أداة التتبُّع
لتشخيص الخطأ باستخدام "أداة التتبُّع"، اتّبِع الخطوات التالية:
- فعِّل
جلسة التتبُّع وأيًّا مما يلي:
- انتظِر إلى أن يظهر الخطأ
502 Bad Gateway، أو - إذا كان بإمكانك إعادة إظهار المشكلة، أجرِ طلب بيانات من واجهة برمجة التطبيقات لإعادة إظهار المشكلة -
الخطأ
502 Bad Gateway
- انتظِر إلى أن يظهر الخطأ
تأكَّد من تفعيل خيار عرض جميع معلومات FlowInfo:
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص التتبُّع.
- تنقَّل بين مراحل التتبُّع المختلفة وحدِّد مكان حدوث الخطأ.
ستجد الخطأ عادةً في مسار بعد مرحلة إرسال الطلب إلى الخادم المستهدف كما هو موضّح أدناه:
دوِّن قيمة الخطأ من التتبُّع.
يعرض نموذج التتبُّع أعلاه الخطأ على النحو التالي:
Received 405 Response without Allow Header. بما أنّ Apigee يعرض الخطأ بعد إرسال الطلب إلى خادم الخلفية، يشير ذلك إلى أنّ خادم الخلفية أرسل رمز حالة الاستجابة405بدون العنوانAllow.- انتقِل إلى مرحلة AX (تسجيل بيانات "إحصاءات Google") في التتبُّع وانقر عليها.
انتقِل للأسفل إلى قسم عناوين الخطأ / الاستجابة في لوحة تفاصيل المرحلة، وحدِّد قيمتَي X-Apigee-fault-code وX-Apigee-fault-source كما هو موضّح أدناه:
- ستظهر قيمتا X-Apigee-fault-code وX-Apigee-fault-source على النحو التالي:
protocol.http.Response405WithoutAllowHeaderوtargetعلى التوالي، ما يشير إلى أنّ هذا الخطأ ناتج عن إرسال الخلفية لرمز حالة الاستجابة405بدون العنوانAllow.عناوين الاستجابة القيمة X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
NGINX
لتشخيص الخطأ باستخدام سجلّات الوصول إلى NGINX، اتّبِع الخطوات التالية:
- إذا كنت مستخدمًا في Private Cloud، يمكنك استخدام سجلّات الوصول إلى NGINX لتحديد المعلومات الأساسية حول أخطاء HTTP
502. تحقَّق من سجلّات الوصول إلى NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
حيث: يتم استبدال ORG وORG وPORT# بالقيم الفعلية.
- ابحث لمعرفة ما إذا كانت هناك أي أخطاء
502برمز الخطأprotocol.http.Response405WithoutAllowHeaderخلال مدة زمنية معيّنة (إذا حدثت المشكلة في الماضي) أو ما إذا كانت هناك أي طلبات لا تزال غير ناجحة مع502. إذا عثرت على أي أخطاء
502مع X-Apigee-fault-code مطابق لقيمةprotocol.http.Response405WithoutAllowHeader، حدِّد قيمة X-Apigee-fault-source.مثال على الخطأ 502 من سجلّ الوصول إلى NGINX:
يحتوي نموذج الإدخال أعلاه من سجلّ الوصول إلى NGINX على القيم التالية لـ X-Apigee- fault-code وX-Apigee-fault-source:
عناوين الاستجابة القيمة X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
السبب: استجابة 405 بدون عنوان Allow من خادم الخلفية
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ
502 Bad Gatewayباستخدام "مراقبة واجهة برمجة التطبيقات" أو "أداة التتبُّع" أو سجلّات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة. - إذا كان رمز الخطأ هو
protocol.http.Response405WithoutAllowHeaderوكان مصدر الخطأ يتضمّن القيمةtarget، يشير ذلك إلى أنّ خادم الخلفية ردّ برمز الحالة405بدون العنوانAllow. لذلك، تردّ Apigee بالرمز502 Bad Gatewayمع رمز الخطأprotocol.http.Response405WithoutAllowHeader.
الدقة
استخدِم إحدى الطرق التالية لحلّ المشكلة:
خادم الخلفية
الخيار 1: إصلاح خادم الخلفية لإرسال رمز الحالة 405 مع العنوان Allow:
تأكَّد من أنّ خادم الخلفية يلتزم دائمًا بالمواصفات RFC 7231، القسم 6.5.5: 405 Method Not Allowed ويرسل مع رمز الحالة
405من خلال تضمين قائمة بالطُرق المسموح بها كجزء من العنوانAllowكما هو موضّح أدناه:Allow: HTTP_METHODS
- على سبيل المثال، إذا كان خادم الخلفية يسمح باستخدام طرق
GETوPOSTوHEAD، عليك التأكّد من أنّ العنوانAllowيتضمّنها على النحو التالي:Allow: GET, POST, HEAD
معالجة الأخطاء
الخيار 2: استخدام ميزة "معالجة الأخطاء" لإرسال رمز الحالة 405 مع العنوان Allow من خادم وكيل لواجهة برمجة التطبيقات:
إذا كان خادم الخلفية يعرض رمز الحالة 405 بدون العنوان Allow، يمكنك استخدام معالجة الأخطاء للرد برمز الحالة 405 والعنوان Allow من خادم وكيل واجهة برمجة التطبيقات على النحو التالي:
أنشئ سياسة مثل AssignMessage policy أو RaiseFault policy واضبط رمز الحالة على
405مع العنوانAllowورسالة مخصّصة.نموذج لسياسة AssignMessage لإرسال الرمز 405 مع العنوان Allow:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader"> <DisplayName>AM-405WithAllowHeader</DisplayName> <Set> <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload> <StatusCode>405</StatusCode> <ReasonPhrase>Method Not Allowed</ReasonPhrase> </Set> <Add> <Headers> <Header name="Allow">GET, POST, HEAD</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
أنشئ
FaultRuleفيTargetEndpointيستدعي السياسة عند تلقّي الخطأ502مع رمز الخطأprotocol.http.Response405WithoutAllowHeader.مثال على إعدادات TargetEndpoint التي تعرض FaultRule:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>- احفظ هذه التغييرات في نسخة معدّلة جديدة من خادم وكيل واجهة برمجة التطبيقات وفعِّل النسخة المعدّلة.
- أرسِل طلبات البيانات إلى واجهة برمجة التطبيقات وتأكَّد من تلقّي رمز الحالة
405مع العنوانAllow.
ضبط إعدادات الموقع
الخيار 3: ضبط الموقع في "معالج الرسائل" لمنع Apigee Edge من عرض الخطأ 502
- إذا كنت مستخدمًا في Private Cloud، يمكنك تعديل السمة
HTTP.ignore.allow_header.for.405إلىtrueلمنع Apigee Edge من عرض الخطأ502، حتى إذا كان خادم الخلفية يستجيب برمز الحالة405بدون العنوانAllowباستخدام دليل طريقة التنفيذ: إعداد تجاهل عنوان السماح للسمة 405 في معالجات الرسائل. - إذا كنت من مستخدمي السحابة العامة، يُرجى التواصل مع فريق دعم Apigee Edge.
المواصفات
تتوقّع Apigee استجابة 405 Method Not Allowed من خادم الخلفية مع العنوان Allow وفقًا للمواصفات التالية:
| المواصفات | |
|---|---|
| RFC 7231، القسم 6.5.5: 405 Method Not Allowed | |
| RFC 7231، القسم 7.4.1: السماح |
نقاط أساسية يجب مراعاتها
الحلّ المقترَح هو إصلاح خادم الخلفية لإرسال رمز الحالة 405 مع العنوان Allow والالتزام بالمواصفات
RFC 7231، القسم 6.5.5: 405 Method Not Allowed.
إذا كنت لا تزال بحاجة إلى أي مساعدة من فريق دعم Apigee، انتقِل إلى المعلومات التشخيصية التي يجب جمعها.
يجب جمع معلومات التشخيص
إذا استمرت المشكلة حتى بعد اتّباع التعليمات أعلاه، اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge.
إذا كنت مستخدمًا لخدمة السحابة الإلكترونية العامة، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم خادم وكيل لواجهة برمجة التطبيقات
- أكمِل الأمر
curlالمستخدَم لإعادة إنتاج502 Bad Gatewayمع رمز الخطأprotocol.http.Response405WithoutAllowHeader - ملف التتبُّع لطلبات البيانات من واجهة برمجة التطبيقات
إذا كنت مستخدمًا في Private Cloud، يُرجى تقديم المعلومات التالية:
- رسالة الخطأ الكاملة التي تم رصدها للطلبات التي تعذّر تنفيذها
- اسم البيئة
- حِزمة خادم وكيل لواجهة برمجة التطبيقات
- ملف التتبُّع لطلبات البيانات من واجهة برمجة التطبيقات
سجلّات الوصول إلى NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
حيث: يتم استبدال ORG وORG وPORT# بالقيم الفعلية.
- سجلات نظام "معالج الرسائل"
/opt/apigee/var/log/edge-message-processor/logs/system.log