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

درحال مشاهده اسناد Apigee Edge هستید.
به اسناد Apigee X بروید.
اطلاعات

نشانه

برنامه مشتری کد وضعیت HTTP 502 Bad Gateway را با کد خطای protocol.http.TooBigHeaders به‌عنوان پاسخ برای فراخوانی‌های API دریافت می‌کند.

پیام خطا

برنامه کارخواه کد پاسخ زیر را دریافت می‌کند:

HTTP/1.1 502 Bad Gateway

علاوه‌براین، ممکن است پیام خطای زیر را مشاهده کنید:

{
   "fault":{
      "faultstring":"response headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

علل احتمالی

این خطا زمانی رخ می‌دهد که اندازه کل سرایندهای ارسالی توسط سرور مقصد/زیرینه به Apigee Edge به‌عنوان بخشی از پاسخ HTTP از حد مجاز در Apigee Edge بیشتر باشد.

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

علت شرح دستورالعمل‌های عیب‌یابی برای موارد زیر قابل‌اجرا است
اندازه سرایندها در پاسخ از حد مجاز بیشتر است اندازه سرایند یک سرایند خاص یا مجموع اندازه سرایندهای همه سرایندهای ارسال‌شده توسط سرور هدف/زیرینه به‌عنوان بخشی از پاسخ HTTP به Apigee Edge بیشتر از حد مجاز در Apigee Edge است. کاربران «فضای ابری خصوصی و عمومی لبه‌ای»

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

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

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

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

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

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

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

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

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

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

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

  10. از پنجره گزارش‌ها، جزئیات زیر را یادداشت کنید:
    • کد وضعیت: 502
    • منبع خطا: target
    • کد خطا: protocol.http.TooBigHeaders.
  11. اگر منبع خطا مقدار target و کد خطا مقدار protocol.http.TooBigHeaders را داشته باشد، این نشان می‌دهد که پاسخ HTTP از سرور هدف/ زیرینه دارای سرایندهایی است که اندازه آن‌ها از حد مجاز در Apigee Edge بیشتر است.

ابزار ردیابی

  1. جلسه ردیابی و یکی از این موارد را فعال کنید:
    1. منتظر بمانید تا خطای 502 Bad Gateway رخ دهد، یا
    2. اگر می‌توانید مشکل را بازتولید کنید، فراخوانی API را انجام دهید و خطای 502 Bad Gateway را بازتولید کنید.
  2. یکی از درخواست‌های ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
  3. در مراحل مختلف ردیابی پیمایش کنید و مکان وقوع خطا را پیدا کنید.
  4. معمولاً این خطا را در جاری‌سازی‌ای به‌نام Error (خطا) درست پس‌از مرحله Request sent to target server (درخواست به سرور هدف ارسال شد) همان‌طور که در زیر نشان داده شده است مشاهده خواهید کرد:

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

    مقادیر خطا را از ردیابی یادداشت کنید:

    • خطا: response headers size exceeding 25,600
    • error.class: com.apigee.errors.http.server.BadGateway

    این نشان می‌دهد که Apigee Edge (جزء «پردازشگر پیام») به‌محض دریافت پاسخ از سرور زیرینه، به‌دلیل فراتر رفتن اندازه سرایند از حد مجاز، خطا را ایجاد می‌کند.

  5. خطا را در پاسخ ارسال‌شده به مشتری پاسخ خطا ارسال‌شده توسط Apigee Edge همان‌طور که در زیر نشان داده شده است می‌بینید:

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

  6. مقادیر خطا را از ردیابی یادداشت کنید. ردیابی نمونه بالا نشان می‌دهد:
    • خطا: 502 Bad Gateway.
    • محتوای خطا: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. به فاز AX (داده‌های Analytics ضبط‌شده) در ردیابی بروید و روی آن کلیک کنید تا جزئیات مربوطه را ببینید.

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

    مقدار موارد زیر را یادداشت کنید:

    سرایندهای خطا مقدار
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target
    محتوای خطا: بدنه {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}

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.TooBigHeaders وجود دارد یا نه (اگر مشکل در گذشته رخ داده است) یا اینکه آیا درخواست‌هایی هنوز با 502 ناموفق هستند یا نه.
  4. اگر خطاهای 502 را با X-Apigee-fault-code مطابق با مقدار protocol.http.TooBigHeaders پیدا کردید، مقدار X-Apigee-fault-source را تعیین کنید.

    نمونه خطای ۵۰۲ از گزارش دسترسی NGINX:

    ورودی نمونه بالا از گزارش دسترسی NGINX مقادیر زیر را برای X-Apigee-fault-code و X-Apigee-fault-source: دارد:

    سرایندهای خطا مقدار
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target

دلیل: اندازه سرایندهای پاسخ از حد مجاز بیشتر است

تشخیص

  1. کد خطا، منبع خطا، و اندازه بار پاسخ را برای خطای مشاهده‌شده بااستفاده از «پایش میانای برنامه‌سازی کاربردی»، ابزار «ردیابی»، یا گزارش‌های «دسترسی NGINX» که در مراحل تشخیص خرابی رایج توضیح داده شده است تعیین کنید.
  2. اگر منبع خطا مقدار target داشته باشد، این نشان می‌دهد که پاسخ ارسالی از سرور هدف/زیرینه به Apigee دارای سرایندهایی است که اندازه آن‌ها از حد مجاز در Apigee Edge بیشتر است.
  3. بااستفاده از یکی از روش‌های زیر می‌توانید تأیید کنید که پاسخ هدف/زیرینه دارای سرایندهایی است که اندازه آن‌ها از حد مجاز بیشتر است:

    پیام خطا

    برای راستی‌آزمایی بااستفاده از پیام خطا:

    اگر به پیام خطای کامل دریافتی از Apigee Edge دسترسی دارید، به faultstring مراجعه کنید. faultstring نشان می‌دهد که اندازه سرایند پاسخ از حد مجاز فراتر رفته است.

    پیام خطای نمونه:

    "faultstring":"response headers size exceeding 25,600"

    در پیام خطای بالا، در faultstringتوجه کنید که پاسخ دارای سرایندهایی است که اندازه کل آن‌ها از حد مجاز فراتر رفته است.

    درخواست واقعی

    برای اعتبارسنجی بااستفاده از درخواست واقعی:

    اگر به درخواست واقعی که به سرور هدف/زیرینه ارسال شده است دسترسی دارید، مراحل زیر را انجام دهید:

    1. اگر کاربر «ابر عمومی/ابر خصوصی» هستید، از سرور پشتیبان خود یا هر ماشین دیگری که اجازه دارید از آن به سرور پشتیبان درخواست ارسال کنید، مستقیماً به سرور پشتیبان درخواست ارسال کنید.
    2. اگر کاربر «ابر خصوصی» هستید، می‌توانید درخواست را از یکی از «پردازشگرهای پیام» به سرور زیرینه نیز ارسال کنید.
    3. پاسخ دریافتی از سرور زیرینه را بررسی کنید و به‌طور خاص اندازه کل سرایندهای ارسال‌شده در پاسخ را محاسبه و تأیید کنید.
    4. اگر متوجه شدید که اندازه سرایندها در پایه‌بار پاسخ بیشتر از حد مجاز در Apigee Edge است، این دلیل مشکل است.

      پاسخ نمونه از سرور مقصد:

      curl -v https://TARGET_SERVER_HOST/test
      
      * About to connect() to 10.1.0.10 port 9000 (#0)
      *   Trying 10.1.0.10...
      * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0)
      > GET /test HTTP/1.1
      > User-Agent: curl/7.29.0
      > Host: 10.1.0.10:9000
      > Accept: */*
      <
      < HTTP/1.1 200 OK
      < Accept-Ranges: bytes
      < Content-Length: 0
      < Content-Type: text/plain; charset=utf-8
      < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
      < Testheader1: XVlBzgba—-<snipped>---THctcuAx
      < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
      < Date: Fri, 23 Jul 2021 09:51:22 GMT
      <
      * Connection #0 to host 10.1.0.10 left intact
      

      در مثال بالا، Testheader1 و Testheader2 اندازه‌های بزرگ‌تری دارند که دلیل این خطا است زیرا از حد مجاز در Apigee Edge فراتر رفته است.

    گزارش‌های «پردازشگر پیام»

    برای اعتبارسنجی بااستفاده از گزارش‌های «پردازشگر پیام»:

    اگر کاربر «ابر خصوصی» هستید، می‌توانید از گزارش‌های «پردازشگر پیام» برای اعتبارسنجی اینکه آیا اندازه سرایندهای «پاسخ» از حد مجاز در Apigee Edge فراتر رفته است یا نه استفاده کنید.

    1. گزارش‌های «پردازشگر پیام» را بررسی کنید:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. جستجو کنید تا ببینید آیا درطول مدت زمان خاصی 502 خطایی وجود دارد (اگر مشکل در گذشته رخ داده است) یا اینکه آیا هنوز درخواست‌هایی با 502 ناموفق هستند. می‌توانید از رشته جستجوی زیر استفاده کنید:
      grep -ri "response headers size exceeding"
      
    3. خطوطی از system.log مشابه با موارد زیر پیدا خواهید کرد. اندازه سرایندهای پاسخ ممکن است در مورد شما متفاوت باشد:
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1
      messageid:r23ijb1b-1  NIOThread@1 ERROR HTTP.CLIENT -
      HTTPClient$Context$3.onException() :  ClientChannel[Connected:
      Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1
      bytesRead=0 bytesWritten=207 age=640ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600
      
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest
      rev:1 messageid:r23ijb1b-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
    4. به‌محض اینکه «پردازشگر پیام» پاسخ را از سرور پشتیبان/هدف دریافت کند و متوجه شود که اندازه کل سرایندها بیشتر از ۲۵ کیلوبایت است، متوقف می‌شود و این خطا را برمی‌گرداند:

      response headers size exceeding 25,600

      این خطا به این معنی است که اندازه کل سرایند بیشتر از ۲۵ کیلوبایت است و Apigee وقتی اندازه از حد مجاز ۲۵ کیلوبایت فراتر می‌رود با کد خطای protocol.http.TooBigHeaders خطا می‌دهد

وضوح

اندازه ثابت

گزینه ۱ [توصیه‌شده]: برنامه سرور هدف را اصلاح کنید تا سرایندهایی با اندازه بزرگ‌تر از حد مجاز Apigee ارسال نکند

  1. دلیل ارسال اندازه سرایند پاسخ توسط سرور هدف خاص را بیشتر از حد مجاز تعریف‌شده در حدود تجزیه‌وتحلیل کنید.
  2. اگر مطلوب نیست، برنامه سرور زیرین خود را به‌گونه‌ای اصلاح کنید که سرصفحه‌های «پاسخ» را که اندازه آن‌ها کمتر از حد مجاز در Apigee Edge است ارسال کند.
  3. بررسی کنید که آیا اطلاعات سرایند می‌تواند به‌عنوان بخشی از بدنه پاسخ ارسال شود یا نه.
  4. درصورت امکان، هرگونه اطلاعات بزرگی را که قصد داشتید به‌عنوان بخشی از سرایند در بدنه پاسخ ارسال کنید. این کار تضمین می‌کند که از حد مجاز سرصفحه پاسخ فراتر نروید.

CwC

گزینه #۲ : استفاده از دارایی CwC برای افزایش محدودیت اندازه سرایند پاسخ

‫Apigee دارایی CwC را ارائه می‌دهد که به آن امکان می‌دهد حد مجاز اندازه «سرایندهای پاسخ» را افزایش دهد. برای جزئیات بیشتر، پیکربندی محدودیت‌های «پردازشگر پیام» را ببینید

محدودیت‌ها

‫Apigee انتظار دارد که برنامه مشتری و سرور پشتیبان اندازه‌های سرایند بزرگ‌تر از حد مجاز را که در محدودیت‌های Apigee Edge برای «اندازه سرایند درخواست/پاسخ» مستند شده است ارسال نکنند.

  1. اگر کاربر «ابر عمومی» هستید، حداکثر حد مجاز برای اندازه سرصفحه‌های «درخواست و پاسخ» همان‌طور که برای اندازه سرصفحه «درخواست/پاسخ» در محدودیت‌های Apigee Edge مستند شده است.
  2. اگر کاربر «ابر خصوصی» هستید، ممکن است حد حداکثر پیش‌فرض برای اندازه سرصفحه‌های «درخواست» و «پاسخ» را تغییر داده باشید (اگرچه این کار توصیه نمی‌شود). با دنبال کردن دستورالعمل‌های نحوه بررسی محدودیت فعلی می‌توانید حداکثر محدودیت اندازه «سرایند پاسخ» را تعیین کنید.

چگونه حد فعلی را بررسی کنیم؟

این بخش توضیح می‌دهد که چگونه درستی‌سنجی کنید دارایی HTTPResponse.headers.limit با مقدار جدیدی در «پردازشگرهای پیام» به‌روز شده است.

  1. در ماشین «پردازشگر پیام»، دارایی HTTPResponse.headers.limit را در /opt/apigee/edge-message-processor/conf دایرکتوری جستجو کنید و بررسی کنید چه مقداری تنظیم شده است، همان‌طور که در زیر نشان داده شده است:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. نتیجه نمونه از فرمان بالا به این صورت است:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
  3. در برونداد مثال بالا، توجه کنید که دارایی HTTPResponse.headers.limit با مقدار 25k در http.properties تنظیم شده است.

    این خطا نشان می‌دهد که حد مجاز اندازه «بار پاسخ» پیکربندی‌شده در Apigee برای Private Cloud ۲۵ کیلوبایت است.

اگر هنوز به کمک «پشتیبانی Apigee» نیاز دارید، به باید اطلاعات تشخیصی را جمع‌آوری کنید بروید.

باید اطلاعات تشخیص خرابی را جمع‌آوری کند

اطلاعات تشخیص خرابی زیر را جمع‌آوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:

اگر کاربر «ابر عمومی» هستید، اطلاعات زیر را ارائه دهید:

  • نام سازمان
  • نام محیط
  • نام پراکسی میانای برنامه‌سازی کاربردی
  • فرمان کامل curl برای بازتولید خطای 502 استفاده شد
  • فایل ردیابی برای درخواست‌های API
  • برونداد کامل پاسخ از سرور هدف/زیرینه به‌همراه اندازه سرایندها

اگر کاربر «ابر خصوصی» هستید، اطلاعات زیر را ارائه دهید:

  • پیام خطای کامل مشاهده‌شده برای درخواست‌های ناموفق
  • نام سازمان
  • نام محیط
  • دسته «پراکسی میانای برنامه‌سازی کاربردی»
  • فایل ردیابی برای درخواست‌های ناموفق میانای برنامه‌سازی کاربردی
  • فرمان کامل curl برای بازتولید خطای 502 استفاده شد
  • برونداد کامل پاسخ از سرور هدف/زیرینه به‌همراه اندازه سرایندها
  • گزارش‌های دسترسی 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