502 مدخل غير صالح - الاستجابة 405 بدون عنوان السماح

أنت الآن بصدد الاطّلاع على مستندات 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

لتشخيص الخطأ باستخدام "مراقبة واجهة برمجة التطبيقات"، اتّبِع الخطوات التالية:

  1. سجِّل الدخول إلى واجهة مستخدم Edge بصفتك مستخدمًا لديه دور مناسب.
  2. انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.

    قائمة المؤسسات المنسدلة
  3. انتقِل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
  4. اختَر الفترة الزمنية المحدّدة التي لاحظت فيها الأخطاء.
  5. رسم بياني لرمز الخطأ مقابل الوقت

  6. اختَر الخلية التي تحتوي على رمز الخطأ protocol.http.Response405WithoutAllowHeader كما هو موضّح أدناه:

  7. تظهر المعلومات حول رمز الخطأ protocol.http.Response405WithoutAllowHeader كما هو موضّح أدناه:

  8. انقر على عرض السجلات ووسِّع أحد الطلبات التي تعذّر تنفيذها للاطّلاع على مزيد من المعلومات.

  9. من نافذة السجلّات، سجِّل التفاصيل التالية:
    • رمز الحالة: 502
    • مصدر الخطأ: target
    • رمز الخطأ: protocol.http.Response405WithoutAllowHeader
  10. إذا كان مصدر الخطأ هو target وكان رمز الخطأ هو protocol.http.Response405WithoutAllowHeader، يشير ذلك إلى أنّ خادم الخلفية ردّ برمز الحالة 405 Method Not Allowed بدون العنوان Allow.

أداة التتبُّع

لتشخيص الخطأ باستخدام "أداة التتبُّع"، اتّبِع الخطوات التالية:

  1. فعِّل جلسة التتبُّع وأيًّا مما يلي:
    • انتظِر إلى أن يظهر الخطأ 502 Bad Gateway، أو
    • إذا كان بإمكانك إعادة إظهار المشكلة، أجرِ طلب بيانات من واجهة برمجة التطبيقات لإعادة إظهار المشكلة - الخطأ 502 Bad Gateway
  2. تأكَّد من تفعيل خيار عرض جميع معلومات FlowInfo:

  3. اختَر أحد الطلبات التي تعذّر تنفيذها وافحص التتبُّع.
  4. تنقَّل بين مراحل التتبُّع المختلفة وحدِّد مكان حدوث الخطأ.
  5. ستجد الخطأ عادةً في مسار بعد مرحلة إرسال الطلب إلى الخادم المستهدف كما هو موضّح أدناه:

  6. دوِّن قيمة الخطأ من التتبُّع.

    يعرض نموذج التتبُّع أعلاه الخطأ على النحو التالي: Received 405 Response without Allow Header. بما أنّ Apigee يعرض الخطأ بعد إرسال الطلب إلى خادم الخلفية، يشير ذلك إلى أنّ خادم الخلفية أرسل رمز حالة الاستجابة 405 بدون العنوان Allow.

  7. انتقِل إلى مرحلة AX (تسجيل بيانات "إحصاءات Google") في التتبُّع وانقر عليها.
  8. انتقِل للأسفل إلى قسم عناوين الخطأ / الاستجابة في لوحة تفاصيل المرحلة، وحدِّد قيمتَي X-Apigee-fault-code وX-Apigee-fault-source كما هو موضّح أدناه:

  9. ستظهر قيمتا X-Apigee-fault-code وX-Apigee-fault-source على النحو التالي: protocol.http.Response405WithoutAllowHeader وtarget على التوالي، ما يشير إلى أنّ هذا الخطأ ناتج عن إرسال الخلفية لرمز حالة الاستجابة 405 بدون العنوان Allow.
    عناوين الاستجابة القيمة
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

NGINX

لتشخيص الخطأ باستخدام سجلّات الوصول إلى NGINX، اتّبِع الخطوات التالية:

  1. إذا كنت مستخدمًا في Private Cloud، يمكنك استخدام سجلّات الوصول إلى NGINX لتحديد المعلومات الأساسية حول أخطاء HTTP 502.
  2. تحقَّق من سجلّات الوصول إلى NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log

    حيث: يتم استبدال ORG وORG وPORT# بالقيم الفعلية.

  3. ابحث لمعرفة ما إذا كانت هناك أي أخطاء 502 برمز الخطأ protocol.http.Response405WithoutAllowHeader خلال مدة زمنية معيّنة (إذا حدثت المشكلة في الماضي) أو ما إذا كانت هناك أي طلبات لا تزال غير ناجحة مع 502.
  4. إذا عثرت على أي أخطاء 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.Response405WithoutAllowHeader
    X-Apigee-fault-source target

السبب: استجابة 405 بدون عنوان Allow من خادم الخلفية

التشخيص

  1. حدِّد رمز الخطأ ومصدر الخطأ 502 Bad Gateway باستخدام "مراقبة واجهة برمجة التطبيقات" أو "أداة التتبُّع" أو سجلّات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة.
  2. إذا كان رمز الخطأ هو protocol.http.Response405WithoutAllowHeader وكان مصدر الخطأ يتضمّن القيمة target، يشير ذلك إلى أنّ خادم الخلفية ردّ برمز الحالة 405 بدون العنوان Allow. لذلك، تردّ Apigee بالرمز 502 Bad Gateway مع رمز الخطأ protocol.http.Response405WithoutAllowHeader.

الدقة

استخدِم إحدى الطرق التالية لحلّ المشكلة:

خادم الخلفية

الخيار 1: إصلاح خادم الخلفية لإرسال رمز الحالة 405 مع العنوان Allow:

  1. تأكَّد من أنّ خادم الخلفية يلتزم دائمًا بالمواصفات RFC 7231، القسم 6.5.5: 405 Method Not Allowed ويرسل مع رمز الحالة 405 من خلال تضمين قائمة بالطُرق المسموح بها كجزء من العنوان Allow كما هو موضّح أدناه:

    Allow: HTTP_METHODS
  2. على سبيل المثال، إذا كان خادم الخلفية يسمح باستخدام طرق GET وPOST وHEAD، عليك التأكّد من أنّ العنوان Allow يتضمّنها على النحو التالي:
    Allow: GET, POST, HEAD

معالجة الأخطاء

الخيار 2: استخدام ميزة "معالجة الأخطاء" لإرسال رمز الحالة 405 مع العنوان Allow من خادم وكيل لواجهة برمجة التطبيقات:

إذا كان خادم الخلفية يعرض رمز الحالة 405 بدون العنوان Allow، يمكنك استخدام معالجة الأخطاء للرد برمز الحالة 405 والعنوان Allow من خادم وكيل واجهة برمجة التطبيقات على النحو التالي:

  1. أنشئ سياسة مثل 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>
  2. أنشئ 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>
  3. احفظ هذه التغييرات في نسخة معدّلة جديدة من خادم وكيل واجهة برمجة التطبيقات وفعِّل النسخة المعدّلة.
  4. أرسِل طلبات البيانات إلى واجهة برمجة التطبيقات وتأكَّد من تلقّي رمز الحالة 405 مع العنوان Allow.

ضبط إعدادات الموقع

الخيار 3: ضبط الموقع في &quot;معالج الرسائل&quot; لمنع Apigee Edge من عرض الخطأ 502

  1. إذا كنت مستخدمًا في Private Cloud، يمكنك تعديل السمة HTTP.ignore.allow_header.for.405 إلى true لمنع Apigee Edge من عرض الخطأ 502، حتى إذا كان خادم الخلفية يستجيب برمز الحالة 405 بدون العنوان Allow باستخدام دليل طريقة التنفيذ: إعداد تجاهل عنوان السماح للسمة 405 في معالجات الرسائل.
  2. إذا كنت من مستخدمي السحابة العامة، يُرجى التواصل مع فريق دعم 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

المراجع

التعامل مع الأخطاء في Apigee