502 Bad Gateway - 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 از سرور 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 تنظیم مجدد محتوا
بدن پاسخ خطا خطا

سربرگ Content-Length

(روی عدد غیر صفر تنظیم شده است)

خطا خطا

Content-Encoding

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

خطا بدون خطا
Transfer-Encoding خطا خطا

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

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

مراحل تشخیص مشترک

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

نظارت بر API

برای تشخیص خطا با استفاده از مانیتورینگ API:

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

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

    ( تصویر را بزرگتر ببینید )

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

    ( تصویر را بزرگتر ببینید )

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

    ( تصویر را بزرگتر ببینید )

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

ابزار ردیابی

برای تشخیص خطا با استفاده از ابزار Trace:

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

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

    ( تصویر را بزرگتر ببینید )

  8. توجه داشته باشید که مقادیر 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:

  1. اگر شما یک کاربر Private Cloud هستید، می‌توانید از گزارش‌های دسترسی NGINX برای تعیین اطلاعات کلیدی در مورد HTTP 502 Bad Gateway استفاده کنید.
  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 protocol.http.ResponseWithBody
    منبع گسل X-Apigee target
  5. توجه داشته باشید که مقادیر X-Apigee-fault-code و X-Apigee-fault-source به ترتیب protocol.http.ResponseWithBody و target هستند. این نشان می‌دهد که خطا به این دلیل رخ داده است که سرور backend کد وضعیت 204 No Content یا 205 Reset Content را به همراه بدنه پاسخ و/یا یکی از هدرهای ذکر شده در Possible causes ارسال کرده است.

علت: بدنه پاسخ یا هدرها با پاسخ 204 از سرور backend

تشخیص

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

    1. اگر شما یک کاربر ابر عمومی هستید، و اگر می‌توانید درخواست API یکسانی را مستقیماً از هر یک از سیستم‌های خود به سرور backend ارسال کنید.

    2. اگر شما یک کاربر ابر خصوصی هستید، می‌توانید همان درخواست API را مستقیماً از یکی از پردازنده‌های پیام مرتبط با سازمان و محیطی خاص که در آن خرابی مشاهده شده است، به سرور backend ارسال کنید.
    3. پاسخ دریافتی از سرور 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.

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

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