درحال مشاهده اسناد Apigee Edge هستید.
به
اسناد Apigee X بروید. اطلاعات
نشانه
برنامه مشتری کد وضعیت HTTP 502 Bad Gateway را با کد خطای protocol.http.ResponseWithBody بهعنوان پاسخ برای تماسهای API دریافت میکند.
پیام خطا
برنامه کارخواه کد پاسخ زیر را دریافت میکند:
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، بخش ۶.۳.۵: 204 No Content (محتوایی وجود ندارد) و
RFC 7231، بخش ۶.۳.۶: 205 Reset Content (بازنشانی محتوا)، انتظار میرود که هیچ محتوای اضافهای
بهعنوان بخشی از بدنه بار پاسخ با کد وضعیت 204 No
Content یا 205 Reset Content توسط سرور مبدأ ارسال نشود. سرایندهای پاسخ
مثل Content-Length، Content-Encoding، یا
Transfer-Encoding اندازه، نوع، یا قالب بار پاسخ را نشان میدهند.
بنابراین، Apigee Edge کد وضعیت 502 Bad Gateway را با
کد خطای protocol.http.ResponseWithBody به مشتری تحت شرایط زیر برمیگرداند:
شرایط زیر:
| کد وضعیت از سرور زیرینه | ||
|---|---|---|
| پاسخ از سرور زیرینه شامل | ۲۰۴ بدون محتوا | 205 بازنشانی محتوا |
| متن پاسخ | خطا | خطا |
سرایند (روی غیرصفر تنظیم شود) |
خطا | خطا |
(روی کدبندی پشتیبانیشده در Apigee Edge تنظیم کنید) |
خطا | خطایی وجود ندارد |
Transfer-Encoding |
خطا | خطا |
در اینجا دلایل احتمالی این خطا آورده شده است:
| علت | شرح | دستورالعملهای عیبیابی برای موارد زیر قابلاجرا است |
|---|---|---|
| بدنه پاسخ یا سرایندها با پاسخ ۲۰۴ از سرور زیرینه | سرور زیرینه پاسخ 204 No Content یا 205 Reset Content
را با بدنه پاسخ و/یا یک یا چند سرصفحه Content-Type،
Content-Encoding، یا Transfer-Encoding ارسال میکند. |
کاربران «فضای ابری خصوصی و عمومی لبهای» |
مراحل متداول تشخیص خرابی
برای تشخیص این خطا، از یکی از ابزارها/تکنیکهای زیر استفاده کنید:
پایش میانای برنامهسازی کاربردی
برای تشخیص خطا بااستفاده از «پایش API»:
- بهعنوان کاربری با نقش مناسب به سیستم Apigee Edge UI وارد شوید.
به سازمانی که میخواهید مشکل را در آن بررسی کنید بروید.
- به صفحه تجزیهوتحلیل > پایش API > بررسی پیمایش کنید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کردهاید انتخاب کنید.
- رسم کد خطا دربرابر زمان.
سلولی را که کد خطای
protocol.http.ResponseWithBodyرا دارد انتخاب کنید همانطور که در زیر نشان داده شده است:
اطلاعات مربوط به کد خطا
protocol.http.ResponseWithBodyرا همانطور که در زیر نشان داده شده است خواهید دید:
روی مشاهده گزارشها کلیک کنید و ردیف درخواست ناموفق را ازهم باز کنید.
- از پنجره گزارشها، جزئیات زیر را یادداشت کنید:
- کد وضعیت:
502 - منبع خطا:
target - کد خطا:
protocol.http.ResponseWithBody.
- کد وضعیت:
- اگر منبع خطا مقدار
targetو کد خطا مقدارprotocol.http.ResponseWithBodyرا داشته باشد، این نشان میدهد که خطا بهدلیل ارسال کد وضعیت204 No Contentیا205 Reset Contentتوسط سرور زیرینه همراه با بدنه پاسخ و/یا یکی از سرایندهای ذکرشده در بخش علل احتمالی رخ داده است.
ابزار ردیابی
برای تشخیص خرابی بااستفاده از ابزار «ردیابی»:
- جلسه ردیابی
و یکی از این موارد را فعال کنید:
- منتظر بمانید تا خطای
502 Bad Gatewayرخ دهد. یا - اگر میتوانید مشکل را بازتولید کنید، فراخوانی API را انجام دهید و خطای
502 Bad Gatewayرا بازتولید کنید.
- منتظر بمانید تا خطای
مطمئن شوید که نمایش همه FlowInfos فعال باشد:
- یکی از درخواستهای ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
- در مراحل مختلف ردیابی پیمایش کنید و مکان وقوع خطا را پیدا کنید.
معمولاً خطا را در
flowinfoError (خطا) درست پساز مرحله Request sent to target server (درخواست به سرور هدف ارسال شد) همانطور که در زیر نشان داده شده است پیدا خواهید کرد:سناریو شماره ۱
سناریو ۱: «سرور زیرینه» با کد وضعیت
204 No Contentحاوی بدنه پاسخ و/یا یکی از سرصفحههای فهرستشده در علل احتمالی پاسخ میدهد.
مقادیر زیر را از ردیابی یادداشت کنید:
- خطا:
Received 204 Response with message body - error.class:
com.apigee.rest.framework.BadGateway
سناریو شماره ۲
سناریو شماره ۲: «سرور زیرینه» با کد وضعیت
204 No Contentحاوی بدنه پاسخ و/یا یکی از سرصفحههای فهرستشده در علل احتمالی پاسخ میدهد.
مقادیر زیر را از ردیابی یادداشت کنید:
- خطا:
Received 205 Response with message body - error.class:
com.apigee.rest.framework.BadGateway
- خطا:
- به فاز AX (دادههای Analytics ضبطشده) در ردیابی پیمایش کنید و روی آن کلیک کنید.
به بخش جزئیات فاز، سرایندهای خطا در پایین پیمایش کنید و مقادیر 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:
- اگر کاربر «ابر خصوصی» هستید، میتوانید از گزارشهای دسترسی NGINX برای
تعیین اطلاعات کلیدی درباره
502 Bad GatewayHTTP استفاده کنید. گزارشهای دسترسی 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 را تعیین کنید.نمونه خطای ۵۰۲ از گزارش دسترسی 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ازسوی سرور زیرینه با بدنه پاسخ و/یا یکی از سرایندهای ذکرشده در دلایل احتمالی رخ داده است.
علت: بدنه پاسخ یا سرایندها با پاسخ ۲۰۴ از سرور زیرینه
تشخیص
- کد خطا و منبع خطا را برای خطای مشاهدهشده بااستفاده از «پایش میانای برنامهسازی کاربردی»، «ابزار ردیابی»، یا گزارشهای دسترسی NGINX همانطور که در مراحل تشخیص متداول توضیح داده شده است تعیین کنید.
- اگر کد خطا برابر با
protocol.http.ResponseWithBodyباشد و منبع خطا مقدارtargetرا داشته باشد، این نشان میدهد که سرور پشتیبان با کد وضعیت204 No Contentیا205 Reset Contentهمراه با بدنه پاسخ و/یا یکی از سرایندهای ذکرشده در علل احتمالی پاسخ داده است. برای تأیید اینکه آیا سرور پشتیبان واقعاً بدنه بار پاسخ و/یا یک یا چند سربرگ ذکرشده در دلایل احتمالی را ارسال کرده است، میتوانید مراحل زیر را انجام دهید:
اگر کاربر «ابر عمومی» هستید و اگر میتوانید همان درخواست میانای برنامهسازی کاربردی را مستقیماً از هریک از سیستمهایتان به سرور پشتیبان ارسال کنید.
- اگر کاربر «ابر خصوصی» هستید، میتوانید همان درخواست «میانای برنامهسازی کاربردی» را مستقیماً از یکی از «پردازشگرهای پیام» منسوب به سازمان و محیط خاصی که خرابی در آن مشاهده شده است به سرور زیرینه ارسال کنید.
پاسخ دریافتی از سرور پشتیبان را بررسی کنید و مطمئن شوید که حاوی بدنه بار پاسخ و/یا یک یا چند سرصفحه ذکرشده در بالا است. اگر پاسخ مثبت است، این دلیل این خطا است.
نمونه شماره ۱
نمونه شماره ۱: پاسخ سرور زیرینه ۲۰۴ با سرایند «کدبندی محتوا»
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پاسخ دادنمونه شماره ۲
نمونه شماره ۲: پاسخ سرور پشتیبان ۲۰۰ با سرایند «طول محتوا»
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پاسخ دادنمونه شماره ۳
نمونه شماره ۳: پاسخ سرور زیرینه ۲۰۵ با بدنه پاسخ
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، بخش ۶.۳.۶: 205 Reset Content، هنگام ارسال پاسخ 204 No Content
یا 205 Reset Content به Apigee Edge پیروی میکند. یعنی سرور زیرینه
نباید موارد زیر را بهعنوان بخشی از 204 No Content یا
پاسخ 205 Reset Content ارسال کند:
- متن پایهبار پاسخ
- و هریک از سرایندهای زیر:
Content-LengthContent-EncodingTransfer-Encoding
مشخصات
اگر سرور پشتیبان پاسخ 204 No Content یا 205 Reset Content ارسال کند اما از مشخصات زیر RFC پیروی نکند، Apigee Edge با کد وضعیت 502 Bad Gateway و کد خطا protocol.http.ResponseWithBody پاسخ میدهد:
204 No Content یا 205 Reset Content پاسخ ارسال کند اما از مشخصات زیر RFC پیروی نکند:
| مشخصات |
|---|
| RFC 7231، بخش 6.3.5: 204 بدون محتوا |
| RFC 7231، بخش ۶.۳.۶: 205 Reset Content |
نکات کلیدی قابلتوجه
راهحل پیشنهادی این است که سرور پشتیبان را اصلاح کنید تا کد وضعیت 204 No Content
و 205 Reset Content را بدون بدنه پاسخ و هریک از سرایندهای
Content-Length، Content-Encoding، و
Transfer-Encoding ارسال کند و از مشخصات
RFC 7231، بخش ۶.۳.۵: ۲۰۴ بدون محتوا و
RFC 7231، بخش ۶.۳.۶: ۲۰۵ بازنشانی محتوا پیروی کند.
اگر هنوز به کمک «پشتیبانی Apigee» نیاز دارید، به باید اطلاعات تشخیصی را جمعآوری کنید بروید.
باید اطلاعات تشخیص خرابی را جمعآوری کند
اطلاعات تشخیص خرابی زیر را جمعآوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:
اگر کاربر «ابر عمومی» هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط
- نام پراکسی میانای برنامهسازی کاربردی
- فرمان کامل
curlبرای بازتولید خطای502استفاده شد - فایل ردیابی برای درخواستهای 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