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

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

المشكلة

يحصل تطبيق العميل على رمز حالة 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 غير مسموح بها، يُتوقَّع أن ينشئ خادم المصدر حقل رأس Allow ويرسله في استجابة 405 تحتوي على قائمة بالطرق المتوافقة حاليًا للمورد الهدف. إذا لم يكن الأمر كذلك، ستستجيب Apigee باستخدام 502 Bad Gateway ورمز الخطأ protocol.http.Response405WithoutAllowHeader.

السبب الوصف تعليمات تحديد المشاكل وحلّها السارية على
استجابة 405 بدون عنوان "السماح" من خادم الخلفية يستجيب خادم الخلفية الذي يعالج طلب البيانات من واجهة برمجة التطبيقات برمز الحالة 405 بدون العنوان Allow. مستخدمو Edge العام والخاص على السحابة الإلكترونية

خطوات التشخيص الشائعة

استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:

مراقبة واجهة برمجة التطبيقات

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

  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. تأكَّد من تفعيل Show all FlowInfos (إظهار جميع عمليات التدفق):

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

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

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

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

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

NGINX

لتشخيص الخطأ باستخدام سجلات الوصول إلى NGINX:

  1. إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك استخدام سجلات وصول NGINX لتحديد المعلومات الأساسية حول أخطاء 502 في HTTP.
  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-code

    نموذج خطأ 502 من سجل وصول NGINX:

    يحتوي إدخال النموذج أعلاه من سجل الوصول إلى NGINX على القيم التالية للسمة X-Apigee- error-code وX-Apigee-Error-source:

    عناوين الاستجابة القيمة
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

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

التشخيص

  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 أو ClaimFault وضبط رمز الحالة على 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 الذي يعرض الخطأ المتعلّق بقاعدة الخطأ:

    <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: ضبط السمة في "معالج الرسائل" لمنع Apigee Edge من عرض الخطأ 502

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

المواصفات

تتوقّع Apigee استجابة 405 Method Not Allowed من الخادم الخلفية مع عنوان Allow وفقًا للمواصفات التالية:

المواصفات
RFC 7231، الفقرة 6.5.5: طريقة 405 غير مسموح بها
RFC 7231، القسم 7.4.1: السماح

نقاط رئيسية يجب ملاحظتها

والحلّ المقترَح هو إصلاح خادم الخلفية من أجل إرسال رمز الحالة 405 مع العنوان Allow والالتزام بالمواصفات RFC 7231، الفقرة 6.5.5: 405 الطريقة غير مسموح بها.

إذا كنت لا تزال بحاجة إلى أي مساعدة من فريق دعم Apigee، يُرجى الانتقال إلى ضرورة جمع معلومات التشخيص.

ضرورة جمع معلومات التشخيص

في حال استمرار المشكلة حتى بعد اتّباع التعليمات الواردة أعلاه، يمكنك جمع معلومات التشخيص التالية، ثم التواصل مع فريق دعم Apigee Edge.

إذا كنت من مستخدمي Cloud Cloud، يُرجى تقديم المعلومات التالية:

  • اسم المؤسسة
  • اسم البيئة
  • اسم الخادم الوكيل لواجهة برمجة التطبيقات
  • أكمِل الأمر curl المستخدَم لإعادة إنشاء 502 Bad Gateway مع عرض رمز الخطأ protocol.http.Response405WithoutAllowHeader.
  • ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات

إذا كنت مستخدم 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