‫۵۰۲ دروازه نادرست - ResponseWithBody

درحال مشاهده اسناد 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-Length
  • Content-Encoding
  • Transfer-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 بازنشانی محتوا
متن پاسخ خطا خطا

سرایند Content-Length

(روی غیرصفر تنظیم شود)

خطا خطا

Content-Encoding

(روی کدبندی پشتیبانی‌شده در Apigee Edge تنظیم کنید)

خطا خطایی وجود ندارد
Transfer-Encoding خطا خطا

در اینجا دلایل احتمالی این خطا آورده شده است:

علت شرح دستورالعمل‌های عیب‌یابی برای موارد زیر قابل‌اجرا است
بدنه پاسخ یا سرایندها با پاسخ ۲۰۴ از سرور زیرینه سرور زیرینه پاسخ 204 No Content یا 205 Reset Content را با بدنه پاسخ و/یا یک یا چند سرصفحه Content-Type، Content-Encoding، یا Transfer-Encoding ارسال می‌کند. کاربران «فضای ابری خصوصی و عمومی لبه‌ای»

مراحل متداول تشخیص خرابی

برای تشخیص این خطا، از یکی از ابزارها/تکنیک‌های زیر استفاده کنید:

پایش میانای برنامه‌سازی کاربردی

برای تشخیص خطا بااستفاده از «پایش API»:

  1. به‌عنوان کاربری با نقش مناسب به سیستم Apigee Edge UI وارد شوید.
  2. به سازمانی که می‌خواهید مشکل را در آن بررسی کنید بروید.

  3. به صفحه تجزیه‌وتحلیل > پایش API > بررسی پیمایش کنید.
  4. بازه زمانی خاصی را که در آن خطاها را مشاهده کرده‌اید انتخاب کنید.
  5. رسم کد خطا دربرابر زمان.
  6. سلولی را که کد خطای protocol.http.ResponseWithBody را دارد انتخاب کنید همان‌طور که در زیر نشان داده شده است:

    ( مشاهده تصویر بزرگ‌تر)

  7. اطلاعات مربوط به کد خطا protocol.http.ResponseWithBody را همان‌طور که در زیر نشان داده شده است خواهید دید:

    ( مشاهده تصویر بزرگ‌تر)

  8. روی مشاهده گزارش‌ها کلیک کنید و ردیف درخواست ناموفق را ازهم باز کنید.

    ( مشاهده تصویر بزرگ‌تر)

  9. از پنجره گزارش‌ها، جزئیات زیر را یادداشت کنید:
    • کد وضعیت: 502
    • منبع خطا: target
    • کد خطا: protocol.http.ResponseWithBody.
  10. اگر منبع خطا مقدار target و کد خطا مقدار protocol.http.ResponseWithBody را داشته باشد، این نشان می‌دهد که خطا به‌دلیل ارسال کد وضعیت 204 No Content یا 205 Reset Content توسط سرور زیرینه همراه با بدنه پاسخ و/یا یکی از سرایندهای ذکرشده در بخش علل احتمالی رخ داده است.

ابزار ردیابی

برای تشخیص خرابی بااستفاده از ابزار «ردیابی»:

  1. جلسه ردیابی و یکی از این موارد را فعال کنید:
    1. منتظر بمانید تا خطای 502 Bad Gateway رخ دهد. یا
    2. اگر می‌توانید مشکل را بازتولید کنید، فراخوانی API را انجام دهید و خطای 502 Bad Gateway را بازتولید کنید.
  2. مطمئن شوید که نمایش همه FlowInfos فعال باشد:

  3. یکی از درخواست‌های ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
  4. در مراحل مختلف ردیابی پیمایش کنید و مکان وقوع خطا را پیدا کنید.
  5. معمولاً خطا را در flowinfo Error (خطا) درست پس‌از مرحله 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
  6. به فاز AX (داده‌های Analytics ضبط‌شده) در ردیابی پیمایش کنید و روی آن کلیک کنید.
  7. به بخش جزئیات فاز، سرایندهای خطا در پایین پیمایش کنید و مقادیر X-Apigee-fault-code و X-Apigee-fault-source را همان‌طور که در زیر نشان داده شده است تعیین کنید:

    ( مشاهده تصویر بزرگ‌تر)

  8. توجه داشته باشید که مقادیر 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.ResponseWithBody
    X-Apigee-fault-source target

NGINX

برای تشخیص خطا بااستفاده از گزارش‌های دسترسی NGINX:

  1. اگر کاربر «ابر خصوصی» هستید، می‌توانید از گزارش‌های دسترسی NGINX برای تعیین اطلاعات کلیدی درباره 502 Bad Gateway HTTP استفاده کنید.
  2. گزارش‌های دسترسی NGINX را بررسی کنید:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    مکان: ORG، ENV، و PORT# با مقادیر واقعی جایگزین می‌شوند.

  3. جستجو کنید تا ببینید آیا درطول مدت مشخصی 502 خطایی با کد خطای protocol.http.ResponseWithBody وجود دارد (اگر مشکل در گذشته رخ داده است) یا اینکه آیا هنوز درخواست‌هایی با 502 ناموفق هستند.
  4. اگر خطاهای 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.ResponseWithBody
    X-Apigee-fault-source target
  5. توجه داشته باشید که مقادیر X-Apigee-fault-code و X-Apigee-fault-source به‌ترتیب protocol.http.ResponseWithBody و target هستند. این کد نشان می‌دهد که خطا به‌دلیل ارسال کد وضعیت 204 No Content یا 205 Reset Content ازسوی سرور زیرینه با بدنه پاسخ و/یا یکی از سرایندهای ذکرشده در دلایل احتمالی رخ داده است.

علت: بدنه پاسخ یا سرایندها با پاسخ ۲۰۴ از سرور زیرینه

تشخیص

  1. کد خطا و منبع خطا را برای خطای مشاهده‌شده بااستفاده از «پایش میانای برنامه‌سازی کاربردی»، «ابزار ردیابی»، یا گزارش‌های دسترسی NGINX همان‌طور که در مراحل تشخیص متداول توضیح داده شده است تعیین کنید.
  2. اگر کد خطا برابر با protocol.http.ResponseWithBody باشد و منبع خطا مقدار target را داشته باشد، این نشان می‌دهد که سرور پشتیبان با کد وضعیت 204 No Content یا 205 Reset Content همراه با بدنه پاسخ و/یا یکی از سرایندهای ذکرشده در علل احتمالی پاسخ داده است.
  3. برای تأیید اینکه آیا سرور پشتیبان واقعاً بدنه بار پاسخ و/یا یک یا چند سربرگ ذکرشده در دلایل احتمالی را ارسال کرده است، می‌توانید مراحل زیر را انجام دهید:

    1. اگر کاربر «ابر عمومی» هستید و اگر می‌توانید همان درخواست میانای برنامه‌سازی کاربردی را مستقیماً از هریک از سیستم‌هایتان به سرور پشتیبان ارسال کنید.

    2. اگر کاربر «ابر خصوصی» هستید، می‌توانید همان درخواست «میانای برنامه‌سازی کاربردی» را مستقیماً از یکی از «پردازشگرهای پیام» منسوب به سازمان و محیط خاصی که خرابی در آن مشاهده شده است به سرور زیرینه ارسال کنید.
    3. پاسخ دریافتی از سرور پشتیبان را بررسی کنید و مطمئن شوید که حاوی بدنه بار پاسخ و/یا یک یا چند سرصفحه ذکرشده در بالا است. اگر پاسخ مثبت است، این دلیل این خطا است.

      نمونه شماره ۱

      نمونه شماره ۱: پاسخ سرور زیرینه ۲۰۴ با سرایند «کدبندی محتوا»

      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. پاسخ داد

    4. در همه مثال‌های بالا، سرور زیرینه کد وضعیت 204 No Content یا 205 Reset Content را با بدنه پاسخ و/یا یکی از سرایندهای ذکرشده در علل احتمالی ارسال کرد.
    5. بنابراین، 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 ارسال کند:

  1. متن پایه‌بار پاسخ
  2. و هریک از سرایندهای زیر:
    1. Content-Length
    2. Content-Encoding
    3. Transfer-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