شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
علامت
برنامهی کلاینت، کد وضعیت HTTP 502 Bad Gateway را به همراه کد خطای messaging.adaptors.http.flow.DecompressionFailureAtResponse به عنوان پاسخی به فراخوانیهای API دریافت میکند.
پیام خطا
برنامهی کلاینت کد پاسخ زیر را دریافت میکند:
HTTP/1.1 502 Bad Gateway
علاوه بر این، ممکن است پیام خطایی مشابه آنچه در زیر نشان داده شده است را مشاهده کنید:
{
"fault":{
"faultstring":"Decompression failure at response",
"detail":{
"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"
}
}
}علل احتمالی
این خطا فقط در صورتی رخ میدهد که:
- کدگذاری مشخص شده در هدر
Content-Encodingپاسخ HTTP (از سرور backend/target) معتبر است و توسط Apigee Edge پشتیبانی میشود . - قالب بار داده ارسالی توسط سرور backend/target به عنوان بخشی از پاسخ HTTP با قالب کدگذاری مشخص شده در هدر
Content-Encodingمطابقت ندارد.
اما
دلیل این امر آن است که Apigee Edge نمیتواند payload را با استفاده از کدگذاری مشخصشده رمزگشایی کند، زیرا فرمت payload با کدگذاری مشخصشده در سربرگ Content-Encoding یکسان نیست.
در اینجا چند نمونه از مقادیر پشتیبانیشدهی Content-Encoding و نحوهی انتظار Apigee Edge از نمایش بار داده در این موارد آورده شده است:
| سناریو | کدگذاری محتوا | نمایش بار مفید |
|---|---|---|
| رمزگذاری تکی | gzip | فرمت به فرمت GZIP در RFC1952 مراجعه کنید. |
| رمزگذاری تکی | باد کردن | این فرمت از ساختار |
| رمزگذاری چندگانه | رمزگذاری چندگانه برای مثال، در مواردی که کدگذاری دو بار انجام میشود، میتواند به صورت زیر باشد:
| کدگذاری چندگانه به ترتیبی که در هدر نشان داده شده است، روی محموله اعمال میشود. |
علل احتمالی این خطا به شرح زیر است:
| علت | توضیحات | دستورالعملهای عیبیابی قابل اجرا برای |
|---|---|---|
| قالب بار پاسخ با کدگذاری محتوا مطابقت ندارد | قالب بار داده پاسخ ارسال شده توسط سرور backend/target یا کدگذاری نشده است یا با کدگذاری مشخص شده در هدر Content-Encoding مطابقت ندارد. | کاربران فضای ابری عمومی و خصوصی Edge |
مراحل تشخیص مشترک
برای تشخیص این خطا از یکی از ابزارها/تکنیکهای زیر استفاده کنید:
نظارت بر API
برای تشخیص خطا با استفاده از مانیتورینگ API:
- به عنوان کاربری با نقش کاربری مناسب، وارد Apigee Edge UI شوید .
به سازمانی که میخواهید مشکل را در آن بررسی کنید، مراجعه کنید.

- به صفحه Analyze > API Monitoring > Investigate بروید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کردهاید، انتخاب کنید.
- مطمئن شوید که فیلتر پروکسی روی «همه» تنظیم شده است.
- رسم کد خطا در مقابل زمان .
سلولی را انتخاب کنید که کد خطای
messaging.adaptors.http.flow.DecompressionFailureAtResponseرا داشته باشد، همانطور که در زیر نشان داده شده است:
اطلاعات مربوط به کد خطا
messaging.adaptors.http.flow.DecompressionFailureAtResponseمطابق شکل زیر نمایش داده میشود:
روی «مشاهده گزارشها» کلیک کنید و ردیفی را که با خطای
502مواجه شده است، باز کنید.
- از پنجره Logs ، جزئیات زیر را یادداشت کنید:
- کد وضعیت:
502 - منبع خطا:
target - کد خطا:
messaging.adaptors.http.flow.DecompressionFailureAtResponse.
- کد وضعیت:
- اگر منبع خطا دارای مقدار
targetباشد، نشان میدهد که فرمت بار داده پاسخ با کدگذاری پشتیبانیشده مشخصشده در هدر پاسخ سرور backendContent-Encodingمطابقت ندارد.
ابزار ردیابی
برای تشخیص خطا با استفاده از ابزار Trace:
- جلسه ردیابی را فعال کنید و یکی از موارد زیر را انجام دهید:
- منتظر بمانید تا خطای
502 Bad Gatewayرخ دهد، یا - اگر میتوانید مشکل را دوباره ایجاد کنید، فراخوانی API را انجام دهید و خطای
502 Bad Gatewayدوباره ایجاد کنید.
- منتظر بمانید تا خطای
مطمئن شوید که گزینهی Show all FlowInfos فعال است:

- یکی از پاسخهای ناموفق را انتخاب کنید و رد آن را بررسی کنید.
- مراحل مختلف ردیابی را طی کنید و محل وقوع خرابی را پیدا کنید.
معمولاً خطا را در جریانی درست پس از مرحله دریافت پاسخ از سرور هدف، مطابق شکل زیر، خواهید یافت:

به مقادیر ویژگیها از مسیر ردیابی توجه کنید:
- رمزگذاری محتوا:
gzip - متن محتوای پاسخ:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- رمزگذاری محتوا:
درست پس از مرحله پاسخ دریافتی از سرور هدف، به مرحله خطا بروید:

به خواص توجه کنید:
- خطا:
Decompression failure at response - کلاس خطا:
com.apigee.errors.http.server.BadGateway error.cause:
Not in GZIP formaterror.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 (دادههای تحلیلی ثبتشده) بروید و روی آن کلیک کنید.
- به پایین صفحه و بخش Phase Details و Error Headers بروید و مقادیر X-Apigee-fault-code و X-Apigee-fault-source را مطابق شکل زیر تعیین کنید:

- مقادیر X-Apigee-fault-code و X-Apigee-fault-source را به صورت
messaging.adaptors.http.flow.DecompressionFailureAtResponseوtargetمشاهده خواهید کرد که نشان میدهد فرمت payload پاسخ با کدگذاری مشخص شده در هدرContent-Encodingمطابقت ندارد.هدرهای پاسخ ارزش کد خطای X-Apigee messaging.adaptors.http.flow.DecompressionFailureAtResponseمنبع گسل X-Apigee target
انجینکس
برای تشخیص خطا با استفاده از گزارشهای دسترسی NGINX:
- اگر شما یک کاربر Private Cloud هستید، میتوانید از گزارشهای دسترسی 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 را تعیین کنید.نمونه خطای ۵۰۲ از لاگ دسترسی NGINX:

ورودی نمونه بالا از لاگ دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:
هدرهای پاسخ ارزش کد خطای X-Apigee messaging.adaptors.http.flow.DecompressionFailureAtResponseمنبع گسل X-Apigee target
علت: قالب بار پاسخ با کدگذاری محتوا مطابقت ندارد
به طور پیشفرض، Apigee Edge همیشه در صورتی که هدر پاسخ Content-Encoding حاوی یک کدگذاری معتبر و پشتیبانیشده باشد، payload را از حالت فشرده خارج میکند. بنابراین، انتظار میرود که قالب payload پاسخ با کدگذاری مشخصشده در Content-Encoding هدر پاسخ مطابقت داشته باشد . اگر عدم تطابق وجود داشته باشد، این خطا را دریافت میکنید.
تشخیص
- کد خطا و منبع خطا را برای خطای مشاهده شده با استفاده از API Monitoring، ابزار Trace یا گزارشهای دسترسی NGINX، همانطور که در مراحل تشخیص مشترک توضیح داده شده است، تعیین کنید.
- اگر کد خطا
messaging.adaptors.http.flow.DecompressionFailureAtResponseباشد و منبع خطا مقدارtargetداشته باشد، این نشان میدهد که قالب بار داده پاسخ ارسال شده توسط سرور backend/target با کدگذاری پشتیبانی شده مشخص شده در هدر پاسخContent-Encodingمطابقت ندارد. شما میتوانید عدم تطابق را به عنوان بخشی از پاسخ HTTP با استفاده از یکی از روشهای زیر تعیین کنید:
پیام خطا
برای اعتبارسنجی با استفاده از پیام خطا:
اگر به پیام خطای کامل دریافتی از Apigee Edge دسترسی دارید، به
faultstringمراجعه کنید.نمونه پیام خطا:
"faultstring":"Decompression failure at response"
- در پیام خطای بالا، عبارت
"Decompression failure at response"نمایش داده میشود که به این معنی است که پاسخ نمیتواند با استفاده از کدگذاری مشخص شده در سربرگContent-Encodingاز حالت فشرده خارج شود.
ردیابی
برای اعتبارسنجی با استفاده از Trace:
- همانطور که در مراحل تشخیص مشترک توضیح داده شده است، با استفاده از Trace، نوع محتوا ( Content-Type) و علت خطا (error.cause) را تعیین کنید.
مقادیر حاصل از ردیابی نمونه به شرح زیر است:
- رمزگذاری محتوا:
gzip - error.cause:
Not in GZIP format
مقدار موجود در هدر پاسخ Content-Encoding برابر با gzip است؛ با این حال، payload پاسخ در قالب GZIP نیست (همانطور که با error.cause نشان داده شده است). بنابراین، Apigee Edge با
502 Bad Gatewayو کد خطایmessaging.adaptors.http.flow.DecompressionFailureAtResponseپاسخ میدهد.- رمزگذاری محتوا:
درخواست واقعی
برای اعتبارسنجی با استفاده از درخواست واقعی:
اگر به درخواست واقعی ارسال شده به برنامه سرور هدف/بکاند دسترسی دارید، مراحل زیر را انجام دهید:
- اگر شما یک کاربر ابر عمومی/ابر خصوصی هستید، مستقیماً از خود سرور بکاند یا هر دستگاه دیگری که از آنجا مجاز به ارسال درخواست به سرور بکاند هستید، درخواستی به سرور بکاند ارسال کنید.
- اگر شما یک کاربر ابر خصوصی هستید، میتوانید درخواست را از طریق یکی از پردازندههای پیام به سرور backend نیز ارسال کنید.
- پاسخ ارسال شده توسط سرور backend را بررسی کنید و مقدار ارسال شده در هدر پاسخ
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 خواهید یافت:
سناریوی شماره ۱
سناریوی شماره ۱: وقتی پاسخ API دارای هدر 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 formatoccurred 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در پیام خطای بالا نشان میدهد که payload پاسخ با فرمت GZIP ارسال نمیشود، اگرچهContent-Encodingبه صورت gzip مشخص شده است. بنابراین، Apigee Edge این استثنا را ایجاد میکند و کد وضعیت502را با کد خطایmessaging.adaptors.http.flow.DecompressionFailureAtResponseبه برنامههای کلاینت برمیگرداند.سناریوی شماره ۲
سناریوی شماره ۲: وقتی پاسخ API دارای هدر 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در پیام خطای بالا نشان میدهند که payload پاسخ با فرمت deflate ارسال نشده و با کدگذاری مشخص شده در هدرContent-Encodingمربوط به deflate مطابقت ندارد. بنابراین، Apigee Edge این استثنا را ایجاد میکند و کد وضعیت502را با کد خطایmessaging.adaptors.http.flow.DecompressionFailureAtResponseبه برنامههای کلاینت برمیگرداند.
وضوح تصویر
- اگر در جریان پروکسی API در Apigee Edge و در سرور backend نیازی به فشردهسازی payload پاسخ نیست، هدر
Content-Encodingرا ارسال نکنید . اگر نیاز به فشردهسازی payload پاسخ است، به مرحله ۲ بروید. - اگر نیاز به فشردهسازی حجم پاسخ وجود دارد، مطمئن شوید که سرور backend همیشه موارد زیر را ارسال میکند:
- هر یک از کدگذاریهای پشتیبانیشده به عنوان مقدار هدر
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 تماس بگیرید:
اگر کاربر فضای ابری عمومی هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط
- نام پروکسی API
- دستور
curlکامل که برای بازتولید خطای502استفاده میشود - فایل ردیابی برای پاسخهای API
اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:
- پیام خطای کامل مشاهده شده برای پاسخهای ناموفق
- نام محیط
- بسته پروکسی API
- فایل ردیابی برای پاسخهای API
گزارشهای دسترسی 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