أنت تعرض مستندات 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
يجب أن يكون تمثيل حمولة البيانات في الحالات التالية:
السيناريو | Content-Encoding | تمثيل الحمولة |
---|---|---|
ترميز فردي | برنامج gzip | تنسيق |
ترميز فردي | انكماش | يستخدم هذا التنسيق بنية |
الترميز المتعدد | الترميز المتعدد على سبيل المثال، في الحالات التي يتم فيها التشفير مرتين، يمكن أن يكون ذلك مما يلي:
|
يتم تطبيق ترميز متعدد على الحمولة بالترتيب المحدد كما يظهر في العنوان. |
فيما يلي الأسباب المحتملة لهذا الخطأ:
السبب | الوصف | إرشادات استكشاف الأخطاء وإصلاحها التي تنطبق على |
---|---|---|
لا يتطابق تنسيق حمولة الاستجابة مع ترميز المحتوى. | وتكون تنسيق حمولة الاستجابة الذي يرسله الخادم الخلفي/خادم الهدف إما
غير مرمّز أو لا
يتطابق مع الترميز المحدَّد في العنوان Content-Encoding |
مستخدمو Edge Public و Private Cloud |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم 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
- انتظِر إلى أن يحدث الخطأ
تأكَّد من تفعيل عرض كل 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 بتنسيق GZIP تم تحديده في عنوان
Content-Encoding
(تم تحديده في السابق خطوة).لذلك، لا تستطيع Apigee Edge فك ضغط الحمولة باستخدام gzip وعرض ملف الخطأDecompression failure at response
.
يُرجى العلم أنّ الاستجابة من الخادم الهدف/الخلفية هي
200
في هذه case; ومع ذلك، سيتلقى تطبيق العميل رسالة الخطأ502
لأنّ الخطأ يعرض في Apigee Edge.- الخطأ:
انتقِل إلى مرحلة تم إرسال الردّ إلى العميل في عملية التتبُّع وانقر عليه.
يُرجى ملاحظة التفاصيل التالية من عملية التتبُّع:
- رمز الحالة:
502 Bad Gateway
. - محتوى الخطأ:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- رمز الحالة:
انتقِل إلى مرحلة AX (بيانات مسجَّلة في "إحصاءات Google") في عملية التتبُّع. وانقر عليه.
- مرِّر لأسفل إلى قسم تفاصيل المرحلة وعناوين الخطأ تحديد قيمتَي X-Apigee-fault-code وX-Apigee-fault-code كما هو موضح أدناه:
- ستظهر لك قيمتا 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 لإجراء ما يلي:
لتحديد المعلومات الأساسية حول أخطاء HTTP
502
. تحقق من سجلات وصول 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-source.نموذج الخطأ 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
السبب: لا يتطابق تنسيق حمولة الاستجابة مع ترميز المحتوى.
تقوم 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
التتبّع
للتحقّق من الصحة باستخدام Trace، اتّبِع الخطوات التالية:
- تحديد Content-Type وerror.cause باستخدام Trace كما هو موضّح في خطوات التشخيص الشائعة.
في ما يلي القيم الواردة من بيانات تتبُّع العينات:
- ترميز المحتوى:
gzip
- error.cause:
Not in GZIP format
القيمة في عنوان الاستجابة Content-Encoding هي gzip؛ مع ذلك، فإنّ حمولة الاستجابة ليست بتنسيق GZIP (كما هو موضّح في error.cause). وبالتالي، تستجيب Apigee Edge باستخدام
502 Bad Gateway
ورمز الخطأmessaging.adaptors.http.flow.DecompressionFailureAtResponse
- ترميز المحتوى:
طلب فعلي
للتحقّق من الصحة باستخدام الطلب الفعلي:
إذا كان بإمكانك الوصول إلى الطلب الفعلي الذي تم تقديمه إلى الخادم الهدف/الخلفية ثم قم بتنفيذ الخطوات التالية:
- إذا كنت من مستخدمي السحابة الإلكترونية العامة/السحابة الخاصة، يمكنك تقديم طلب. مباشرةً إلى خادم الخلفية من خادم الخلفية نفسه أو من أي خادم جهازك من حيث يُسمح لك بتقديم الطلب إلى خادم الخلفية.
- إذا كنت مستخدمًا خاصًا في Cloud، يمكنك أيضًا تقديم الطلب. إلى خادم الخلفية من أحد معالجات الرسائل.
- فحص الاستجابة التي أرسلها خادم الخلفية وتحديد القيمة
تم تمريره في عنوان الاستجابة
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
سجلات معالج الرسائل
للتحقق من صحة استخدام سجلات معالج الرسائل:
إذا كنت مستخدمًا خاصًا في السحابة الإلكترونية، يمكنك استخدام سجلات "معالج الرسائل" لتحديد المعلومات الأساسية حول أخطاء HTTP
502
.تحقَّق من سجلّ معالج الرسائل:
/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
في رسالة الخطأ أعلاه إلى أن حمولة الاستجابة لم يتم إرسالها ولا يتطابق هذا التنسيق مع الترميز المحدد في ملف تعريف الارتباط موضع الانكماش:Content-Encoding
ولذلك، لا شك في أنّ 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 Public، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- إكمال الأمر
curl
المُستخدَم لإعادة إنتاج الخطأ502
- ملف تتبُّع استجابات واجهة برمجة التطبيقات
إذا كنت مستخدمًا للسحابة الإلكترونية الخاصة، قدِّم المعلومات التالية:
- ظهور رسالة الخطأ الكاملة للردود التي لم تنجح
- اسم البيئة
- حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- ملف تتبُّع استجابات واجهة برمجة التطبيقات
سجلّات وصول 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