502 بوابة غير صحيحة - ResponseWithBody

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

المشكلة

يحصل تطبيق العميل على رمز حالة HTTP 502 Bad Gateway مع ظهور الخطأ. الرمز protocol.http.ResponseWithBody كاستجابة لطلبات البيانات من واجهة برمجة التطبيقات.

رسالة الخطأ

يحصل تطبيق العميل على رمز الاستجابة التالي:

HTTP/1.1 502 Bad Gateway

بالإضافة إلى ذلك، قد تظهر لك إحدى رسائل الخطأ التالية:

{
   "fault":{
      "faultstring":"Received 204 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}
{
   "fault":{
      "faultstring":"Received 205 Response with message body",
      "detail":{
         "errorcode":"protocol.http.ResponseWithBody"
      }
   }
}

الأسباب المحتملة

يحدث هذا الخطأ في حال كانت استجابة HTTP من خادم الخلفية إلى Apigee Edge إما 204 No Content أو 205 Reset Content ولكن يحتوي على الردّ نص أساسي و/أو عنوان واحد أو أكثر من العناوين التالية:

  • Content-Length
  • Content-Encoding
  • Transfer-Encoding

وفقًا للمواصفات RFC 7231، الفقرة 6.3.5: 204 بدون محتوى RFC 7231، الفقرة 6.3.6: 205 إعادة ضبط المحتوى، يُتوقَّع عدم توفُّر محتوى إضافي. يجب أن يرسلها خادم المصدر كجزء من نص حمولة الاستجابة مع رمز الحالة 204 No Content أو 205 Reset Content. عناوين الاستجابة مثل Content-Length أو Content-Encoding أو تشير السمة Transfer-Encoding إلى حجم حمولة الاستجابة أو نوعها أو تنسيقها.

لذلك، تعرض Apigee Edge رمز الحالة 502 Bad Gateway مع رمز الخطأ protocol.http.ResponseWithBody للعميل ضمن ما يلي الظروف:

رمز الحالة من خادم الخلفية
يحتوي الرد من خادم الخلفية على 204 ليس هناك محتوى 205 إعادة ضبط المحتوى
نص الاستجابة خطأ خطأ

عنوان واحد (Content-Length)

(قيمة غير صفرية)

خطأ خطأ

Content-Encoding

(تم الضبط على ترميز متوافق في Apigee Edge)

خطأ لا خطأ
Transfer-Encoding خطأ خطأ

في ما يلي الأسباب المحتملة لحدوث هذا الخطأ:

السبب الوصف إرشادات استكشاف الأخطاء وإصلاحها التي تنطبق على
نص الاستجابة أو العناوين التي تتضمّن استجابة 204 من خادم الخلفية يرسل خادم الخلفية 204 No Content أو 205 Reset Content استجابة بها نص استجابة و/أو واحد أو أكثر من العناوين Content-Type، Content-Encoding أو Transfer-Encoding. مستخدمو Edge Public و Private Cloud

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

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

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

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

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

  3. انتقل إلى تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق في الصفحة.
  4. اختَر الفترة الزمنية المحدّدة التي لاحظت فيها الأخطاء.
  5. ارسم رمز الخطأ مقابل الوقت.
  6. اختَر خلية تتضمّن رمز الخطأ protocol.http.ResponseWithBody باعتباره كما هو موضح أدناه:

    ( عرض صورة أكبر)

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

    ( عرض صورة أكبر)

  8. انقر على عرض السجلات ووسِّع صف الطلب الذي تعذّر تنفيذه.

    ( عرض صورة أكبر)

  9. من نافذة السجلات، يُرجى ملاحظة التفاصيل التالية:
    • رمز الحالة: 502
    • مصدر الخطأ: target
    • رمز الخطأ: protocol.http.ResponseWithBody.
  10. إذا كان المصدر الخطأ يحتوي على القيمة target وقيمة الخطأ الرمز: يحتوي الرمز على القيمة protocol.http.ResponseWithBody، وعندئذٍ إلى حدوث الخطأ لأن خادم الخلفية أرسل رمز الحالة 204 No Content أو 205 Reset Content مع نص الاستجابة و/أو أحد العناوين المذكورة في قسم الأسباب المحتملة.

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

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

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

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

    السيناريو الأول

    السيناريو 1: استجابة خادم الخلفية برمز الحالة 204 No Content تحتوي على نص الاستجابة و/أو أحد العناوين المدرجة في الأسباب المحتملة:

    دوِّن قيم ما يلي من عملية التتبُّع:

    • الخطأ: Received 204 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway

    السيناريو الثاني

    السيناريو 2: استجابة خادم الخلفية برمز الحالة 204 No Content التي تحتوي على نص الاستجابة و/أو أحد العناوين المدرَجة في الأسباب المحتملة.

    دوِّن قيم ما يلي من عملية التتبُّع:

    • الخطأ: Received 205 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway
  6. انتقِل إلى مرحلة AX (بيانات مسجَّلة في "إحصاءات Google") في عملية التتبُّع. وانقر عليه.
  7. مرِّر لأسفل إلى قسم تفاصيل المرحلة وعناوين الخطأ تحديد قيمتَي X-Apigee-fault-code وX-Apigee-fault-code كما هو موضح أدناه:

    ( عرض صورة أكبر)

  8. تجدر الإشارة إلى أن قيمتَي X-Apigee-fault-code وX-Apigee-fault-code are protocol.http.ResponseWithBody وtarget على التوالي. يشير ذلك إلى حدوث الخطأ لأنّ خادم الخلفية أرسل رمز الحالة 204 No Content أو 205 Reset Content مع نص الاستجابة و/أو أحد العناوين المذكورة في الأسباب المحتملة.
    خطأ القيمة
    X-Apigee-fault-code protocol.http.ResponseWithBody
    X-Apigee-fault-source target

NGINX

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

  1. إذا كنت مستخدمًا للسحابة الإلكترونية الخاص، يمكنك استخدام سجلات وصول NGINX لإجراء ما يلي: لتحديد المعلومات الأساسية حول HTTP 502 Bad Gateway.
  2. تحقق من سجلات وصول NGINX:

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

    المكان: يتم استبدال ORG وENV وPORT# بقيم فعلية.

  3. البحث لمعرفة ما إذا كان هناك أي أخطاء 502 مع رمز الخطأ protocol.http.ResponseWithBody خلال مدة محدّدة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تخفق مع 502
  4. إذا ظهرت أي أخطاء 502 في X-Apigee-fault-code تتطابق مع قيمة protocol.http.ResponseWithBody، ثم تحديد قيمة X-Apigee-fault-source.

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

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

    عناوين الردود القيمة
    X-Apigee-fault-code protocol.http.ResponseWithBody
    X-Apigee-fault-source target
  5. تجدر الإشارة إلى أن قيمتَي X-Apigee-fault-code وX-Apigee-fault-code protocol.http.ResponseWithBody وtarget على التوالي. يشير ذلك إلى حدوث الخطأ لأنّ خادم الخلفية أرسل رمز الحالة 204 No Content أو 205 Reset Content مع نص الاستجابة و/أو أحد العناوين المذكورة في الأسباب المحتملة.

السبب: نص الاستجابة أو العناوين التي تتضمّن استجابة 204 من خادم الخلفية

التشخيص

  1. حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي تم رصده باستخدام واجهة برمجة التطبيقات. سجلات الوصول للمراقبة أو أداة التتبع أو NGINX كما هو موضح في خطوات التشخيص الشائعة:
  2. إذا كان رمز الخطأ هو protocol.http.ResponseWithBody قيمة المصدر الخطأ هي target، ويشير ذلك إلى أنّ الواجهة الخلفية استجاب الخادم بالحالة 204 No Content أو 205 Reset Content الرمز الذي يحتوي على نص الاستجابة و/أو أحد العناوين المذكورة في الأسباب المحتملة:
  3. للتحقّق مما إذا كان خادم الخلفية قد أرسل فعلاً نص حمولة بيانات للاستجابة و/أو واحدًا أو أكثر من الرؤوس المذكورة في الأسباب المحتملة، يمكنك إجراء الخطوات التالية:

    1. إذا كنت مستخدمًا عامًا في Cloud، وكان بإمكانك إرسال طلب واجهة برمجة التطبيقات نفسه إلى خادم الخلفية مباشرةً من أي من أنظمتك.

    2. إذا كنت من مستخدمي Cloud Private، يمكنك إرسال طلب البيانات من واجهة برمجة التطبيقات نفسه إلى خادم الخلفية مباشرةً من أحد معالِجات معالجة الرسائل المرتبطة المؤسسة والبيئة حيث تتم ملاحظة الفشل.
    3. راجِع الرد الذي تم استلامه من خادم الخلفية وتأكَّد من أنّه يحتوي على نص حمولة الاستجابة و/أو عنوان واحد أو أكثر من العناوين المذكورة أعلاه إذا كانت الإجابة بنعم، فهذا سبب هذا الخطأ.

      النموذج رقم 1

      النموذج 1: استجابة خادم الخلفية 204 باستخدام عنوان ترميز المحتوى

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Encoding: gzip
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      في هذه العينة، استجاب خادم الخلفية رمز الحالة 204 No Content Content-Encoding: gzip

      النموذج رقم 2

      النموذج 2: استجابة خادم الخلفية 204 مع عنوان طول المحتوى

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 204 No Content
      < Content-Length: 48
      < Date: Tue, 31 Jul 2021 21:41:13 GMT
      < Connection: keep-alive
      

      في هذه العينة، استجاب خادم الخلفية رمز الحالة 204 No Content Content-Length: 48

      النموذج رقم 3

      النموذج 3: استجابة خادم الخلفية 205 مع نص الاستجابة

      curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
      

      …
      < HTTP/1.1 205 Reset Content
      < Date: Sat, 31 Jul 2021 17:14:09 GMT
      < Content-Length: 12
      < Content-Type: text/plain; charset=utf-8
      <
      * Connection #0 to host X.X.X.X left intact
      This is a sample Response
      

      في هذه العينة، استجاب خادم الخلفية رمز حالة واحد (205 Reset Content) مع نص الاستجابة This is a sample Response.

    4. في كل الأمثلة المذكورة أعلاه، أرسل خادم الخلفية 204 No Content أو رمز حالة 205 Reset Content مع نص الاستجابة و/أو أحد العناوين مذكورة في الأسباب المحتملة.
    5. لذلك، أرسلت Apigee Edge رمز الحالة 502 Bad Gateway مع رمز الخطأ. protocol.http.ResponseWithBody

الدقة

التأكد من أن خادم الخلفية يلتزم دائمًا بالمواصفات RFC 7231، القسم 6.3.6: 205 إعادة ضبط المحتوى، عند إرسال 204 No Content أو 205 Reset Content على Apigee Edge. أي خادم الخلفية يجب ألا يرسل ما يلي كجزء من 204 No Content أو رد 205 Reset Content:

  1. نص حمولة الاستجابة
  2. وأيٍّ من العناوين التالية:
    1. Content-Length
    2. Content-Encoding
    3. Transfer-Encoding

المواصفات

تستجيب Apigee Edge برمز الحالة 502 Bad Gateway ورمز الخطأ. protocol.http.ResponseWithBody إذا أرسل خادم الخلفية رد 204 No Content أو 205 Reset Content ولكن لا تتقيد بمواصفات RFC التالية:

المواصفات
RFC 7231، الفقرة 6.3.5: 204 بلا محتوى
RFC 7231، الفقرة 6.3.6: 205 إعادة ضبط المحتوى

نقاط رئيسية يجب مراعاتها

الحل المقترَح هو إصلاح خادم الخلفية لإرسال 204 No Content. و205 Reset Content رمز الحالة بدون نص الاستجابة وأي من العناوين - Content-Length وContent-Encoding و Transfer-Encoding والالتزام بالمواصفات RFC 7231، الفقرة 6.3.5: 204 بلا محتوى و RFC 7231، القسم 6.3.6: 205 إعادة ضبط المحتوى.

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

يجب جمع معلومات التشخيص

اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge:

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

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

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

  • ظهور رسالة خطأ كاملة للطلبات التي تعذّر تنفيذها
  • اسم البيئة
  • حزمة الخادم الوكيل لواجهة برمجة التطبيقات
  • ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات
  • سجلّات وصول NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    المكان: يتم استبدال ORG وENV وPORT# بـ القيم الفعلية.

  • سجلّات نظام معالج الرسائل /opt/apigee/var/log/edge-message-processor/logs/system.log