يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات
Apigee X. المعلومات
المشكلة
يحصل تطبيق العميل على رمز حالة HTTP لـ 502 Bad Gateway
مع رمز الخطأ messaging.adaptors.http.flow.DecompressionFailureAtResponse
كاستجابة لطلبات البيانات من واجهة برمجة التطبيقات.
رسالة الخطأ
يتلقى تطبيق العميل رمز الاستجابة التالي:
HTTP/1.1 502 Bad Gateway
بالإضافة إلى ذلك، قد تلاحظ رسالة خطأ مشابهة للرسالة المعروضة أدناه:
{ "fault":{ "faultstring":"Decompression failure at response", "detail":{ "errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse" } } }
الأسباب المحتملة
يحدث هذا الخطأ فقط في الحالات التالية:
- الترميز المحدّد في استجابة HTTP (من الخادم الخلفي/خادم الهدف)
Content-Encoding
صالح و متوافق مع Apigee Edge، - لا يتطابق تنسيق حمولة البيانات الذي أرسله خادم الخلفية/الهدف كجزء من استجابة HTTP مع تنسيق الترميز المحدَّد في عنوان
Content-Encoding
لكن
ويرجع ذلك إلى أنّ Apigee Edge يتعذّر عليها فك ترميز الحمولة باستخدام الترميز المحدَّد لأنّ تنسيق الحمولة ليس بالتنسيق نفسه الذي يتم فيه تنسيق الترميز المحدّد في
عنوان Content-Encoding
.
في ما يلي بعض الأمثلة لقيم Content-Encoding
المتوافقة والطريقة التي يتوقع بها
Apigee Edge تمثيل الحمولة في تلك الحالات:
السيناريو | ترميز المحتوى | تمثيل الحمولة |
---|---|---|
ترميز فردي | gzip | تنسيق Unix راجِع تنسيق RFC1952 GZIP. |
ترميز فردي | انكماش | يستخدِم هذا التنسيق بنية |
الترميز المتعدد | الترميز المتعدد على سبيل المثال، في الحالات التي يتم فيها إجراء الترميز مرتين، يمكن أن يكون:
|
تم تطبيق ترميز متعدد على الحمولة بالترتيب المحدد الذي يظهر في العنوان. |
الأسباب المحتملة لهذا الخطأ هي كما يلي:
السبب | الوصف | تعليمات تحديد المشاكل وحلّها السارية على |
---|---|---|
لا يتطابق تنسيق حمولة الاستجابة مع تنسيق Content-Encoding | إنّ تنسيق حمولة الاستجابة المُرسَل من خادم الخلفية/الهدف إما
غير مرمّز أو
لا يتطابق مع الترميز المحدّد في عنوان Content-Encoding . |
مستخدمو Edge العام والخاص على السحابة الإلكترونية |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم لديه دور مناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
- اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
- تأكّد من ضبط فلتر الخادم الوكيل على الكل.
- ارسم رمز الخطأ مقابل الوقت.
اختَر خلية تحتوي على رمز الخطأ
messaging.adaptors.http.flow.DecompressionFailureAtResponse
كما هو موضّح أدناه:يتم عرض المعلومات عن رمز الخطأ
messaging.adaptors.http.flow.DecompressionFailureAtResponse
كما هو موضّح أدناه:انقر على عرض السجلات ووسِّع الصف الذي يتعذّر عليه ظهور الخطأ
502
.- من نافذة السجلّات، دوِّن التفاصيل التالية:
- رمز الحالة:
502
- مصدر الخطأ:
target
- رمز الخطأ:
messaging.adaptors.http.flow.DecompressionFailureAtResponse
.
- رمز الحالة:
- إذا كانت القيمة
target
في مصدر الخطأ، يشير ذلك إلى أنّ تنسيق حمولة الاستجابة لا يتطابق مع الترميز المتوافق المحدّد في عنوان الاستجابةContent-Encoding
لخادم الخلفية.
أداة التتبُّع
لتشخيص الخطأ باستخدام أداة التتبُّع:
- فعِّل جلسة التتبُّع
وإمّا:
- انتظر حتى يحدث الخطأ
502 Bad Gateway
، أو - إذا كان بإمكانك إعادة إظهار المشكلة، عليك طلب بيانات من واجهة برمجة التطبيقات وإعادة إظهار المشكلة
502 Bad Gateway
.
- انتظر حتى يحدث الخطأ
تأكَّد من تفعيل Show all FlowInfos (إظهار جميع عمليات التدفق):
- اختَر أحد الردود التي تعذّر نقلها وافحص بيانات التتبّع.
- التنقّل خلال المراحل المختلفة لعملية التتبّع وتحديد مكان حدوث الخطأ.
ستجد عادةً الخطأ في التدفق مباشرةً بعد مرحلة تم تلقّي الاستجابة من الخادم الهدف كما هو موضّح أدناه:
-
دوِّن قيم السمات من صفحة التتبّع:
- ترميز المحتوى:
gzip
- نص الرد:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- ترميز المحتوى:
انتقِل إلى مرحلة الخطأ بعد مرحلة الاستجابة المُستلَمة من الخادم الهدف:
انتبه إلى الخصائص:
- خطأ:
Decompression failure at response
- error.class:
com.apigee.errors.http.server.BadGateway
error.cause:
Not in GZIP format
يشير error.cause إلى أنّ حمولة الاستجابة ليست بتنسيق GZIP. يعني هذا أنّ Apigee Edge كانت تتوقّع أن تكون حمولة الاستجابة بتنسيق GZIP كما تم تحديدها في عنوان
Content-Encoding
(تم تحديد ذلك في الخطوة السابقة).لذلك، لا يمكن لخدمة Apigee Edge فك ضغط الحمولة باستخدام gzip وعرض الخطأDecompression failure at response
.
يُرجى العلم أنّ الاستجابة من خادم الهدف/الخلفية هي
200
في هذه الحالة، ولكن سيتلقّى تطبيق العميل الاستجابة502
لأنّه يتم عرض الخطأ من قِبل Apigee Edge.- خطأ:
انتقِل إلى مرحلة الرد المُرسَل إلى العميل في سجلّ التتبُّع وانقر عليه.
دوِّن التفاصيل التالية من صفحة التتبّع:
- رمز الحالة:
502 Bad Gateway
. - محتوى الخطأ:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- رمز الحالة:
انتقِل إلى مرحلة AX (بيانات "إحصاءات Google" المسجّلة) في التتبُّع وانقر عليها.
- انتقِل للأسفل إلى قسم Stage Details (تفاصيل المرحلة) وError Headers (عناوين الخطأ) وحدِّد قيمتَي X-Apigee-Error-code وX-Apigee-fulfillment-source كما هو موضّح أدناه:
- ستظهر قيم السمتَين X-Apigee-fault-code وX-Apigee-fault-code على أنّه
messaging.adaptors.http.flow.DecompressionFailureAtResponse
وtarget
، ما يشير إلى أنّ تنسيق حمولة الاستجابة لا يتطابق مع الترميز المحدّد في العنوانContent-Encoding
.عناوين الاستجابة القيمة X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
X-Apigee-fault-source target
NGINX
لتشخيص الخطأ باستخدام سجلات الوصول إلى NGINX:
- إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك استخدام سجلات وصول NGINX لتحديد المعلومات الأساسية حول أخطاء
502
في HTTP. تحقَّق من سجلات وصول NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
المكان: يتم استبدال ORG وENV وPORT# بالقيم الفعلية.
- ابحث عن أي أخطاء
502
خلال مدة محددة (إذا كانت المشكلة قد حدثت في السابق) أو ما إذا كانت هناك أي استجابات لا تزال يتعذّر إجراؤها مع502
. إذا عثرت على أي أخطاء
502
تتضمّن X-Apigee-fault-code الذي يتطابق مع قيمةmessaging.adaptors.http.flow.DecompressionFailureAtResponse
، حدِّد قيمة X-Apigee-fault-codeنموذج خطأ 502 من سجل وصول NGINX:
يحتوي إدخال النموذج أعلاه من سجلّ الوصول إلى NGINX على القيم التالية للسمة X-Apigee-fault-code وX-Apigee-fault-code :
عناوين الاستجابة القيمة X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
X-Apigee-fault-source target
السبب: لا يتطابق تنسيق حمولة الاستجابة مع تنسيق Content-Encoding
وفقًا للإعدادات التلقائية، يفكّ Apigee Edge الحمولة دائمًا إذا كان عنوان الاستجابة Content-Encoding
يحتوي على
ترميز متوافق وصالح. وبالتالي، من المتوقّع أن يتطابق تنسيق حمولة الاستجابة مع الترميز المحدّد في عنوان الاستجابة Content-Encoding
.
وفي حال عدم التطابق، ستحصل على هذا الخطأ.
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ للخطأ الذي يتم رصده باستخدام مراقبة واجهة برمجة التطبيقات أو أداة التتبُّع أو سجلات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة.
- إذا كان رمز الخطأ هو
messaging.adaptors.http.flow.DecompressionFailureAtResponse
وكانت القيمةtarget
لمصدر الخطأ، يعني ذلك أنّ تنسيق حمولة الاستجابة الذي تم إرساله من خادم الخلفية/الهدف لا يتطابق مع الترميز المتوافق المحدّد في عنوان الاستجابةContent-Encoding
. يمكنك تحديد عدم التطابق كجزء من استجابة HTTP باستخدام إحدى الطرق التالية:
رسالة الخطأ
للتأكُّد من استخدام رسالة الخطأ، اتّبِع الخطوات التالية:
-
إذا كان بإمكانك الوصول إلى رسالة الخطأ الكاملة التي تم تلقّيها من Apigee Edge، يُرجى الرجوع إلى
faultstring
.نموذج لرسالة خطأ:
"faultstring":"Decompression failure at response"
- في رسالة الخطأ أعلاه، يتم عرض
"Decompression failure at response"
، ما يعني أنّه تعذّر فك ضغط الاستجابة باستخدام الترميز المحدّد في العنوانContent-Encoding
.
التتبّع
للتحقق من استخدام التتبع:
- حدِّد نوع المحتوى وerror.cause باستخدام التتبُّع كما هو موضَّح في خطوات التشخيص الشائعة.
في ما يلي القيم من تتبُّع العينة:
- ترميز المحتوى:
gzip
- error.cause:
Not in GZIP format
القيمة في عنوان الاستجابة Content-Encoding هي قيمة gzip، لكنّ حمولة الاستجابة ليست بتنسيق GZIP (كما هو موضّح في error.cause). لذلك، يستجيب Apigee Edge باستخدام
502 Bad Gateway
ورمز الخطأmessaging.adaptors.http.flow.DecompressionFailureAtResponse
.- ترميز المحتوى:
الطلب الفعلي
للتحقّق من استخدام الطلب الفعلي:
إذا كان بإمكانك الوصول إلى الطلب الفعلي الذي تم إجراؤه على تطبيق الخادم الهدف/الخلفية، اتّبِع الخطوات التالية:
- إذا كنت من مستخدمي السحابة الإلكترونية العامة/السحابة الإلكترونية الخاصة، يمكنك تقديم طلب مباشرةً إلى خادم الخلفية من خادم الخلفية نفسه أو أي جهاز آخر يُسمح لك منه بتقديم الطلب إلى خادم الخلفية.
- إذا كنت مستخدمًا خاصًا للسحابة الإلكترونية، يمكنك أيضًا تقديم الطلب إلى الخادم الخلفية من أحد معالجي الرسائل.
- افحص الاستجابة المُرسَلة من خادم الخلفية وحدِّد القيمة التي تم تمريرها في عنوان الاستجابة
Content-Encoding.
- حدِّد تنسيق حمولة البيانات المُرسَلة كجزء من الطلب.
- إذا كانت قيمة العنوان
Content-Encoding
مدرَجة في قائمة الترميز المتوافق، ولكن تنسيق حمولة الاستجابة لا يتطابق مع الترميز المحدّد في عنوانContent-Encoding
، يكون سبب المشكلة هو سبب المشكلة.النموذج:
curl -v https://HOSTALIAS/test
***trimmed*** > < HTTP/1.1 200 OK < Accept-Ranges: bytes <
Content-Encoding: gzip
< Date: Mon, 02 Aug 2021 08:17:35 GMT < Transfer-Encoding: chunked < < response_payload.zip Response Body(not in GZIP format)>يرسل نموذج الاستجابة أعلاه القيمة
gzip
إلى العنوانContent-Encoding
، وهو ترميز متوافق في Apigee Edge. ومع ذلك، يتم إرسالresponse_payload.zip
كملف ZIP. لذلك، يتعذّر تنفيذ هذه الاستجابة وستظهر رسالة الخطأ502 Bad Gateway
مع رمز الخطأ:messaging.adaptors.http.flow.DecompressionFailureAtResponse
.
سجلّات "معالج الرسائل"
للتحقق من صحة استخدام سجلات معالج الرسائل:
إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك استخدام سجلات معالج الرسائل لتحديد المعلومات الأساسية حول أخطاء
502
في HTTP.التحقق من سجل معالج الرسائل:
/opt/apigee/var/log/edge-message-processor/logs/system.log
ابحث عن أي أخطاء
502
خلال مدة محددة (إذا كانت المشكلة قد حدثت في السابق) أو ما إذا كانت هناك أي استجابات لا تزال يتعذّر إجراؤها مع502
. يمكنك استخدام سلسلة البحث التالية:grep -ri "ZipException"
ستجد سطورًا من System.log مشابهة لما يلي:
السيناريو الأول
السيناريو 1: عندما تحتوي استجابة واجهة برمجة التطبيقات على العنوان Content-Encoding: gzip
2021-08-02 06:50:25,433 NIOThread@2 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:3.8.1.1:9000 Local:10.0.115.32:41298]@38140 useCount=1 bytesRead=0 bytesWritten=203 age=469ms lastIO=0ms isOpen=true).onExceptionRead exception: {}
java.util.zip.ZipException: Not in GZIP format
---trimmed-- 2021-08-02 06:50:25,433 NIOThread@2 INFO HTTP.CLIENT - HTTPClient$Context.logContextDetails() : Request details : host=null path=/folder/testFile method=GET. Channel details : Bytes read=0 2021-08-02 06:50:25,434 NIOThread@2 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@4806fdab, Not in GZIP format) 2021-08-02 06:50:25,434 NIOThread@2 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exceptionjava.util.zip.ZipException: Not in GZIP format
occurred while writing to channel null 2021-08-02 06:50:25,434 NIOThread@2 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: java.util.zip.ZipException: Not in GZIP formatيشير السطر
java.util.zip.ZipException: Not in GZIP format
في رسالة الخطأ أعلاه إلى أنّ حمولة الاستجابة لا يتم إرسالها بتنسيق GZIP على الرغم من أنّContent-Encoding
تم تحديدها على أنّها gzip. لذلك، تعرض Apigee Edge الاستثناء وتعرِض رمز الحالة502
مع رمز الخطأmessaging.adaptors.http.flow.DecompressionFailureAtResponse
لتطبيقات العملاء.السيناريو الثاني
السيناريو 2: عندما تحتوي استجابة واجهة برمجة التطبيقات على العنوان Content-Encoding: deflate
2021-08-02 06:35:21,215 NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:3.8.1.1:9000 Local:192.168.194.140:35224]@36014 useCount=1 bytesRead=0 bytesWritten=202 age=439ms lastIO=2ms isOpen=true).onExceptionRead exception: {}
java.util.zip.ZipException: incorrect header check
---trimmed---- Caused by:java.util.zip.DataFormatException: incorrect header check
---trimmed--- 2021-08-02 06:35:21,215 NIOThread@0 INFO HTTP.CLIENT - HTTPClient$Context.logContextDetails() : Request details : host=null path=/folder/testFile method=GET. Channel details : Bytes read=0 2021-08-02 06:35:21,216 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@3966e277, incorrect header check) 2021-08-02 06:35:21,216 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.util.zip.ZipException: incorrect header check occurred while writing to channel null 2021-08-02 06:35:21,217 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: java.util.zip.ZipException: incorrect header checkيشير السطران
java.util.zip.ZipException: incorrect header check
وCaused by: java.util.zip.DataFormatException: incorrect header check
في رسالة الخطأ أعلاه إلى أنّ حمولة الاستجابة لا يتم إرسالها بتنسيق deflate ولا تتطابق مع الترميز المحدّد في العنوانContent-Encoding
من deflate. لذلك، تعرض Apigee Edge الاستثناء وتعرض رمز الحالة502
الذي يتضمّن رمز الخطأmessaging.adaptors.http.flow.DecompressionFailureAtResponse
لتطبيقات العملاء.
-
درجة الدقّة
- إذا لم تكن هناك حاجة إلى حمولة الاستجابة المضغوطة في تدفق الخادم الوكيل لواجهة برمجة التطبيقات في Apigee Edge
وفي خادم الخلفية، يجب عدم تمرير الرأس
Content-Encoding
. إذا كانت هناك حاجة لضغط حمولة الاستجابة، انتقِل إلى الخطوة 2. - إذا كانت هناك حاجة إلى ضغط حمولة الاستجابة، تأكَّد من أنّ خادم الخلفية يرسل ما يلي دائمًا:
- أي من
الترميز المتوافق كقيمة للعنوان
Content-Encoding
في الاستجابة - تتطابق حمولة الاستجابة بالتنسيق المتوافق مع Apigee Edge مع تنسيق الترميز
المحدّد في عنوان
Content-Encoding
.
- أي من
الترميز المتوافق كقيمة للعنوان
- في المثال الذي تمت مناقشته أعلاه، تكون حمولة الاستجابة بتنسيق ZIP، غير أنّ عنوان الاستجابة يحدّد
Content-Encoding: gzip
. يمكنك حلّ هذه المشكلة من خلال إرسال عنوان الاستجابة على النحوContent-Encoding: gzip
وحمولة الاستجابة بتنسيقgzip
:curl -v https://HOSTALIAS/v1/test
> < HTTP/1.1 200 OK < Accept-Ranges: bytes <
Content-Encoding: gzip
< Date: Mon, 02 Aug 2021 08:17:35 GMT < Transfer-Encoding: chunked < < response_payload.gz Response Body(in GZIP format)>
المواصفات
يستجيب Apigee Edge برمز الحالة 502 Bad Gateway
برمز الخطأ
messaging.adaptors.http.flow.DecompressionFailureAtResponse
وفقًا لمواصفات RFC التالية:
المواصفات |
---|
RFC 7231، القسم 6.5.1 |
RFC 7231، القسم 3.1.2.2 |
إذا كنت لا تزال بحاجة إلى أي مساعدة من فريق دعم Apigee، يُرجى الانتقال إلى ضرورة جمع معلومات التشخيص.
ضرورة جمع معلومات التشخيص
اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge:
إذا كنت من مستخدمي Cloud Cloud، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- أكمِل أمر
curl
المستخدَم لإعادة إظهار الخطأ502
. - ملف تتبُّع ردود واجهة برمجة التطبيقات
إذا كنت مستخدم 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