شما در حال مشاهده مستندات 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 از سرور backend به Apigee Edge یا 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 ، انتظار میرود که هیچ محتوای اضافی به عنوان بخشی از بدنهی payload پاسخ با کد وضعیت 204 No Content یا 205 Reset Content توسط سرور مبدا ارسال نشود. هدرهای پاسخ مانند Content-Length ، Content-Encoding یا Transfer-Encoding اندازه، نوع یا قالب payload پاسخ را نشان میدهند.
بنابراین، Apigee Edge تحت شرایط زیر کد وضعیت 502 Bad Gateway را با کد خطای protocol.http.ResponseWithBody به کلاینت برمیگرداند:
| کد وضعیت از سرور backend | ||
|---|---|---|
| پاسخ از سرور backend شامل موارد زیر است: | ۲۰۴ بدون محتوا | 205 تنظیم مجدد محتوا |
| بدن پاسخ | خطا | خطا |
سربرگ (روی عدد غیر صفر تنظیم شده است) | خطا | خطا |
( در Apigee Edge روی کدگذاری پشتیبانیشده تنظیم شده است) | خطا | بدون خطا |
Transfer-Encoding | خطا | خطا |
در اینجا علل احتمالی این خطا آورده شده است:
| علت | توضیحات | دستورالعملهای عیبیابی قابل اجرا برای |
|---|---|---|
| بدنه پاسخ یا هدرها با پاسخ ۲۰۴ از سرور backend | سرور backend یک پاسخ 204 No Content یا 205 Reset Content به همراه یک بدنه پاسخ و/یا یک یا چند هدر Content-Type ، Content-Encoding یا Transfer-Encoding ارسال میکند. | کاربران فضای ابری عمومی و خصوصی Edge |
مراحل تشخیص مشترک
برای تشخیص این خطا از یکی از ابزارها/تکنیکهای زیر استفاده کنید:
نظارت بر API
برای تشخیص خطا با استفاده از مانیتورینگ API:
- به عنوان کاربری با نقش کاربری مناسب، وارد Apigee Edge UI شوید .
به سازمانی که میخواهید مشکل را در آن بررسی کنید، مراجعه کنید.

- به صفحه Analyze > API Monitoring > Investigate بروید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کردهاید، انتخاب کنید.
- رسم کد خطا در مقابل زمان .
سلولی را انتخاب کنید که کد خطا
protocol.http.ResponseWithBodyآن مطابق شکل زیر باشد:
اطلاعات مربوط به کد خطا
protocol.http.ResponseWithBodyرا مطابق شکل زیر مشاهده خواهید کرد:
روی «مشاهده گزارشها» کلیک کنید و ردیف مربوط به درخواست ناموفق را باز کنید.

- از پنجره Logs ، جزئیات زیر را یادداشت کنید:
- کد وضعیت:
502 - منبع خطا:
target - کد خطا:
protocol.http.ResponseWithBody.
- کد وضعیت:
- اگر منبع خطا دارای مقدار
targetو کد خطا دارای مقدارprotocol.http.ResponseWithBodyباشد، نشان میدهد که خطا به این دلیل رخ داده است که سرور backend کد وضعیت204 No Contentیا205 Reset Contentرا به همراه بدنه پاسخ و/یا یکی از هدرهای ذکر شده در بخش علل احتمالی ارسال کرده است.
ابزار ردیابی
برای تشخیص خطا با استفاده از ابزار Trace:
- جلسه ردیابی را فعال کنید و یکی از موارد زیر را انجام دهید:
- منتظر بمانید تا خطای
502 Bad Gatewayرخ دهد. یا - اگر میتوانید مشکل را دوباره ایجاد کنید، فراخوانی API را انجام دهید و خطای
502 Bad Gatewayرا دوباره ایجاد کنید.
- منتظر بمانید تا خطای
مطمئن شوید که گزینهی Show all FlowInfos فعال است:

- یکی از درخواستهای ناموفق را انتخاب کنید و مسیر پیگیری را بررسی کنید.
- مراحل مختلف ردیابی را طی کنید و محل وقوع خرابی را پیدا کنید.
معمولاً خطا را درست پس از ارسال درخواست به سرور هدف، مطابق شکل زیر، در قسمت خطای
flowinfoمشاهده خواهید کرد:سناریوی شماره ۱
سناریوی شماره ۱: سرور Backend با کد وضعیت
204 No Contentحاوی متن پاسخ و/یا یکی از هدرهای ذکر شده در علل احتمالی نیست» .
به مقادیر زیر از مسیر ردیابی توجه کنید:
- خطا:
Received 204 Response with message body - کلاس خطا:
com.apigee.rest.framework.BadGateway
سناریوی شماره ۲
سناریوی شماره ۲: سرور Backend با کد وضعیت
204 No Contentحاوی متن پاسخ و/یا یکی از هدرهای ذکر شده در علل احتمالی نیست».
به مقادیر زیر از مسیر ردیابی توجه کنید:
- خطا:
Received 205 Response with message body - کلاس خطا:
com.apigee.rest.framework.BadGateway
- خطا:
- در مسیر ردیابی، به مرحله AX (دادههای تحلیلی ثبتشده) بروید و روی آن کلیک کنید.
به پایین صفحه و بخش Phase Details و Error Headers بروید و مقادیر X-Apigee-fault-code و X-Apigee-fault-source را مطابق شکل زیر تعیین کنید:

- توجه داشته باشید که مقادیر X-Apigee-fault-code و X-Apigee-fault-source به ترتیب
are protocol.http.ResponseWithBodyوtargetهستند. این نشان میدهد که خطا به این دلیل رخ داده است که سرور backend کد وضعیت204 No Contentیا205 Reset Contentرا به همراه بدنه پاسخ و/یا یکی از هدرهای ذکر شده در Possible causes ارسال کرده است.خطا ارزش کد خطای X-Apigee protocol.http.ResponseWithBodyمنبع گسل X-Apigee target
انجینکس
برای تشخیص خطا با استفاده از گزارشهای دسترسی NGINX:
- اگر شما یک کاربر Private Cloud هستید، میتوانید از گزارشهای دسترسی NGINX برای تعیین اطلاعات کلیدی در مورد HTTP
502 Bad Gatewayاستفاده کنید. گزارشهای دسترسی 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 protocol.http.ResponseWithBodyمنبع گسل X-Apigee target- توجه داشته باشید که مقادیر X-Apigee-fault-code و X-Apigee-fault-source به ترتیب
protocol.http.ResponseWithBodyوtargetهستند. این نشان میدهد که خطا به این دلیل رخ داده است که سرور backend کد وضعیت204 No Contentیا205 Reset Contentرا به همراه بدنه پاسخ و/یا یکی از هدرهای ذکر شده در Possible causes ارسال کرده است.
علت: بدنه پاسخ یا هدرها با پاسخ 204 از سرور backend
تشخیص
- کد خطا و منبع خطا را برای خطای مشاهده شده با استفاده از API Monitoring، ابزار Trace یا گزارشهای دسترسی NGINX، همانطور که در مراحل تشخیص مشترک توضیح داده شده است، تعیین کنید.
- اگر کد خطا
protocol.http.ResponseWithBodyباشد و Fault Source مقدارtargetداشته باشد، این نشان میدهد که سرور backend با کد وضعیت204 No Contentیا205 Reset Contentبه همراه بدنه پاسخ و/یا یکی از هدرهای ذکر شده در Possible causes پاسخ داده است. برای تأیید اینکه آیا سرور backend واقعاً یک بدنهی بار دادهی پاسخ و/یا یک یا چند مورد از هدرهای ذکر شده در علل احتمالی را ارسال کرده است، میتوانید مراحل زیر را انجام دهید:
اگر شما یک کاربر ابر عمومی هستید، و اگر میتوانید درخواست API یکسانی را مستقیماً از هر یک از سیستمهای خود به سرور backend ارسال کنید.
- اگر شما یک کاربر ابر خصوصی هستید، میتوانید همان درخواست API را مستقیماً از یکی از پردازندههای پیام مرتبط با سازمان و محیطی خاص که در آن خرابی مشاهده شده است، به سرور backend ارسال کنید.
پاسخ دریافتی از سرور backend را بررسی کنید و تأیید کنید که حاوی بدنهی payload پاسخ و/یا یک یا چند مورد از هدرهای ذکر شده در بالا است. اگر بله، پس دلیل این خطا همین است.
نمونه شماره ۱
نمونه شماره ۱: پاسخ سرور Backend به شماره ۲۰۴ با هدر کدگذاری محتوا
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در این نمونه، سرور backend با کد وضعیت
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در این نمونه، سرور backend با کد وضعیت
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در این نمونه، سرور backend با کد وضعیت
205 Reset Contentبه همراه متن پاسخ پاسخ دادThis is a sample Response.- در تمام مثالهای بالا، سرور backend کد وضعیت
204 No Contentیا205 Reset Contentرا به همراه متن پاسخ و/یا یکی از هدرهای ذکر شده در بخش «دلایل احتمالی» ارسال کرده است. - بنابراین، Apigee Edge کد وضعیت
502 Bad Gatewayرا به همراه کد خطایprotocol.http.ResponseWithBodyارسال کرد.
وضوح تصویر
اطمینان حاصل کنید که سرور backend هنگام ارسال پاسخ 204 No Content یا 205 Reset Content به Apigee Edge، همیشه به Specification RFC 7231، بخش 6.3.6: 205 Reset Content پایبند باشد. یعنی، سرور backend نباید موارد زیر را به عنوان بخشی از پاسخ 204 No Content یا 205 Reset Content ارسال کند:
- بدنه بار پاسخ
- و هر یک از سربرگهای زیر:
-
Content-Length -
Content-Encoding -
Transfer-Encoding
-
مشخصات
اگر سرور backend پاسخ 204 No Content یا 205 Reset Content را ارسال کند، اما به مشخصات RFC زیر پایبند نباشد، Apigee Edge با کد وضعیت 502 Bad Gateway و کد خطای protocol.http.ResponseWithBody پاسخ میدهد:
| مشخصات |
|---|
| RFC 7231، بخش 6.3.5: 204 بدون محتوا |
| RFC 7231، بخش 6.3.6: 205 تنظیم مجدد محتوا |
نکات کلیدی قابل توجه
راه حل پیشنهادی این است که سرور backend را طوری تنظیم کنید که کد وضعیت 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 تماس بگیرید:
اگر کاربر فضای ابری عمومی هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط
- نام پروکسی 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