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 Public و Private Cloud

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

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

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

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

  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. تأكَّد من تفعيل عرض كل FlowInfos:

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

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

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

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

  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 لتحديد المعلومات الأساسية حول أخطاء 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- رمز الخطأ و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 باستخدام العنوان "السماح":

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

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

التعامل مع الأخطاء

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

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

  1. يمكنك إنشاء سياسة مثل سياسة assignMessage أو سياسة riseFault واضبط رمز الحالة على 405 مع عنوان Allow وعنوان URL مخصّص .

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

  1. إذا كنت من مستخدمي Private Cloud، يمكنك تعديل الموقع. من 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 Public، يُرجى تقديم المعلومات التالية:

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

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

  • ظهور رسالة خطأ كاملة للطلبات التي تعذّر تنفيذها
  • اسم البيئة
  • حزمة الخادم الوكيل لواجهة برمجة التطبيقات
  • ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات
  • سجلات وصول 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