يتم الآن عرض مستندات 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-LengthContent-EncodingTransfer-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 |
| نص الرد | خطأ | خطأ |
العنوان (تم ضبطه على قيمة غير صفرية) |
خطأ | خطأ |
(تم ضبطه على ترميز متوافق في Apigee Edge) |
خطأ | ليس هناك خطأ |
Transfer-Encoding |
خطأ | خطأ |
في ما يلي الأسباب المحتملة لهذا الخطأ:
| السبب | الوصف | تعليمات تحديد المشاكل وحلّها التي تنطبق على |
|---|---|---|
| نص الاستجابة أو العناوين مع استجابة 204 من خادم الخلفية | يرسل خادم الخلفية استجابة 204 No Content أو 205 Reset Content
مع نص استجابة و/أو واحد أو أكثر من العناوين Content-Type أو Content-Encoding أو Transfer-Encoding. |
مستخدمو Edge Public Cloud وPrivate Cloud |
الخطوات الشائعة لتشخيص المشكلة
استخدِم إحدى الأدوات أو التقنيات التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام "مراقبة واجهة برمجة التطبيقات"، اتّبِع الخطوات التالية:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم لديه دور مناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقِل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
- اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
- ارسم رمز الخطأ مقابل الوقت.
اختَر خلية تحتوي على رمز الخطأ
protocol.http.ResponseWithBodyكما موضّح أدناه:
ستظهر لك معلومات عن رمز الخطأ
protocol.http.ResponseWithBodyكما هو موضّح أدناه:
انقر على عرض السجلّات ووسِّع صف الطلب الذي تعذّر تنفيذه.
- من نافذة السجلّات ، اكتب التفاصيل التالية:
- رمز الحالة:
502 - مصدر الخطأ:
target - رمز الخطأ:
protocol.http.ResponseWithBody.
- رمز الحالة:
- إذا كانت قيمة مصدر الخطأ هي
targetوكانت قيمة رمز الخطأ هيprotocol.http.ResponseWithBody، يشير ذلك إلى أنّ الخطأ حدث لأنّ خادم الخلفية أرسل رمز الحالة204 No Contentأو205 Reset Contentمع نص الاستجابة و/أو أحد العناوين المذكورة في قسم الأسباب المحتملة.
أداة التتبُّع
لتشخيص الخطأ باستخدام أداة التتبُّع، اتّبِع الخطوات التالية:
- فعِّل جلسة التتبُّع
وقم بأحد الإجراءَين التاليَين:
- انتظِر إلى حين حدوث الخطأ
502 Bad Gateway. أو - إذا كان بإمكانك إعادة إظهار المشكلة، نفِّذ طلب البيانات من واجهة برمجة التطبيقات وأعِد إظهار الخطأ
502 Bad Gateway.
- انتظِر إلى حين حدوث الخطأ
تأكَّد من تفعيل الخيار عرض جميع معلومات التدفق:
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص التتبُّع.
- انتقِل بين المراحل المختلفة للتتبُّع وحدِّد مكان حدوث الخطأ.
ستجد عادةً الخطأ في
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
- error:
- انتقِل إلى مرحلة AX (بيانات "إحصاءات Google" المسجّلة) في التتبُّع وانقر عليها.
انتقِل للأسفل إلى قسمَي تفاصيل المرحلة وعناوين الخطأ وحدِّد قيمتَي X-Apigee-fault-code وX-Apigee-fault-source كما هو موضّح أدناه:
- لاحظ أنّ قيمتَي 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.ResponseWithBodyX-Apigee-fault-source target
NGINX
لتشخيص الخطأ باستخدام سجلّات الوصول إلى NGINX، اتّبِع الخطوات التالية:
- إذا كنت مستخدمًا في Private Cloud، يمكنك استخدام سجلّات الوصول إلى NGINX لتحديد المعلومات الأساسية عن الخطأ
502 Bad Gatewayفي HTTP. تحقَّق من سجلّات الوصول إلى NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logملاحظة: يتم استبدال ORG وENV وPORT# بالقيم الفعلية.
- ابحث لمعرفة ما إذا كانت هناك أي أخطاء
502مع رمز الخطأprotocol.http.ResponseWithBodyخلال مدة معيّنة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تتعذّر مع ظهور الخطأ502. إذا عثرت على أي أخطاء
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.ResponseWithBodyX-Apigee-fault-source target- لاحظ أنّ قيمتَي X-Apigee-fault-code وX-Apigee-fault-source
هما
protocol.http.ResponseWithBodyوtargetعلى التوالي. يشير ذلك إلى أنّ الخطأ حدث لأنّ خادم الخلفية أرسل رمز الحالة204 No Contentأو205 Reset Contentمع نص الاستجابة و/أو أحد العناوين المذكورة في الأسباب المحتملة.
السبب: نص الاستجابة أو العناوين مع استجابة 204 من خادم الخلفية
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي تم رصده باستخدام "مراقبة واجهة برمجة التطبيقات" أو أداة التتبُّع أو سجلّات الوصول إلى NGINX كما هو موضّح في الخطوات الشائعة لتشخيص المشكلة.
- إذا كان رمز الخطأ هو
protocol.http.ResponseWithBodyوكانت قيمة مصدر الخطأ هيtarget، يشير ذلك إلى أنّ خادم الخلفية استجاب برمز الحالة204 No Contentأو205 Reset Contentمع نص الاستجابة و/أو أحد العناوين المذكورة في قسم الأسباب المحتملة. للتحقّق مما إذا كان خادم الخلفية قد أرسل بالفعل نص حمولة استجابة و/أو واحدًا أو أكثر من العناوين المذكورة في قسم الأسباب المحتملة، يمكنك اتّباع الخطوات التالية:
إذا كنت مستخدمًا في Public Cloud ، يمكنك إرسال طلب البيانات نفسه من واجهة برمجة التطبيقات إلى خادم الخلفية مباشرةً من أي من أنظمتك.
- إذا كنت مستخدمًا في Private Cloud، يمكنك إرسال طلب بيانات من واجهة برمجة التطبيقات نفسه إلى خادم الخلفية مباشرةً من أحد معالِجات الرسائل المرتبطة بالمؤسسة والبيئة المحدّدتَين اللتَين تم رصد الخطأ فيهما.
راجِع الاستجابة التي تم تلقّيها من خادم الخلفية وتأكَّد من أنّها تحتوي على نص حمولة استجابة و/أو واحد أو أكثر من العناوين المذكورة أعلاه. إذا كان الأمر كذلك، يكون هذا هو سبب هذا الخطأ.
النموذج 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.- في جميع الأمثلة أعلاه، أرسل خادم الخلفية
204 No Contentأو205 Reset Contentرمز الحالة مع نص الاستجابة و/أو أحد العناوين المذكورة في الأسباب المحتملة. - لذلك، أرسل 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:
- نص حمولة الاستجابة
- وأي من العناوين التالية:
Content-LengthContent-EncodingTransfer-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