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

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

المشكلة

يتلقّى تطبيق العميل رمز حالة 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 No Content و RFC 7231، القسم 6.3.6: 205 Reset Content، من المتوقّع ألا يتم إرسال أي محتوى إضافي كجزء من نص حمولة الاستجابة مع رمز الحالة 204 No Content أو 205 Reset Content من قِبل الخادم الأصلي. تشير عناوين الاستجابة ، مثل Content-Length أو Content-Encoding أو Transfer-Encoding، إلى حجم حمولة الاستجابة أو نوعها أو تنسيقها.

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

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

العنوان Content-Length

(تم ضبطه على قيمة غير صفرية)

خطأ خطأ

Content-Encoding

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

خطأ ليس هناك خطأ
Transfer-Encoding خطأ خطأ

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

السبب الوصف تعليمات تحديد المشاكل وحلّها التي تنطبق على
نص الاستجابة أو العناوين مع استجابة 204 من خادم الخلفية يرسل خادم الخلفية استجابة 204 No Content أو 205 Reset Content مع نص استجابة و/أو واحد أو أكثر من العناوين Content-Type أو Content-Encoding أو Transfer-Encoding. مستخدمو Edge Public Cloud و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. تأكَّد من تفعيل الخيار عرض جميع معلومات التدفق:

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

    السيناريو 1

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

    اكتب قيم العناصر التالية من التتبُّع:

    • error: Received 204 Response with message body
    • error.class: com.apigee.rest.framework.BadGateway

    السيناريو 2

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

    اكتب قيم العناصر التالية من التتبُّع:

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

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

  8. لاحظ أنّ قيمتَي X-Apigee-fault-code وX-Apigee-fault-source 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. إذا كنت مستخدمًا في Private Cloud، يمكنك استخدام سجلّات الوصول إلى NGINX لتحديد المعلومات الأساسية عن الخطأ 502 Bad Gateway في HTTP.
  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-fault-code وX-Apigee-fault-source:

    عناوين الاستجابة القيمة
    X-Apigee-fault-code protocol.http.ResponseWithBody
    X-Apigee-fault-source target
  5. لاحظ أنّ قيمتَي X-Apigee-fault-code وX-Apigee-fault-source هما 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. إذا كنت مستخدمًا في Public Cloud ، يمكنك إرسال طلب البيانات نفسه من واجهة برمجة التطبيقات إلى خادم الخلفية مباشرةً من أي من أنظمتك.

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

      النموذج 1

      النموذج 1: استجابة خادم الخلفية 204 مع عنوان Content-Encoding

      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 مع عنوان Content-Length

      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 Reset Content، عند إرسال الاستجابة 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 No Content
RFC 7231، القسم 6.3.6: 205 Reset Content

نقاط أساسية يجب أخذها في الاعتبار

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

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

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

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

إذا كنت مستخدمًا في Public Cloud، قدِّم المعلومات التالية:

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

إذا كنت مستخدمًا في Private Cloud ، قدِّم المعلومات التالية:

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