شما در حال مشاهده مستندات 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 است. | کاربران فضای ابری عمومی و خصوصی Edge |
مراحل تشخیص مشترک
برای تشخیص این خطا از یکی از ابزارها/تکنیکهای زیر استفاده کنید:
نظارت بر API
برای تشخیص خطا با استفاده از مانیتورینگ API:
- به عنوان کاربری با نقش کاربری مناسب، وارد Apigee Edge UI شوید .
به سازمانی که میخواهید مشکل را در آن بررسی کنید، مراجعه کنید.

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

- از پنجره Logs ، جزئیات زیر را یادداشت کنید:
- کد وضعیت:
502 - منبع خطا:
target - کد خطا:
protocol.http.TooBigHeaders.
- کد وضعیت:
- اگر منبع خطا (Fault Source) مقدار
targetو کد خطا (Fault Code) مقدارprotocol.http.TooBigHeadersرا داشته باشد، این نشان میدهد که پاسخ HTTP از سرور target/backend دارای هدرهایی است که اندازه آنها بزرگتر از حد مجاز در Apigee Edge است.
ابزار ردیابی
- جلسه ردیابی را فعال کنید و یکی از موارد زیر را انجام دهید:
- منتظر بمانید تا خطای
502 Bad Gatewayرخ دهد، یا - اگر میتوانید مشکل را دوباره ایجاد کنید، فراخوانی API را انجام دهید و خطای
502 Bad Gatewayرا دوباره ایجاد کنید.
- منتظر بمانید تا خطای
- یکی از درخواستهای ناموفق را انتخاب کنید و مسیر پیگیری را بررسی کنید.
- مراحل مختلف ردیابی را طی کنید و محل وقوع خرابی را پیدا کنید.
معمولاً این خطا را در جریانی با نام Error درست پس از ارسال درخواست به سرور هدف ، مطابق شکل زیر مشاهده خواهید کرد:

به مقادیر خطا از ردیابی توجه کنید:
- خطا:
response headers size exceeding 25,600 - کلاس خطا :
com.apigee.errors.http.server.BadGateway
این نشان میدهد که Apigee Edge (مؤلفه پردازنده پیام) به محض دریافت پاسخ از سرور backend به دلیل اندازه هدر بیش از حد مجاز، خطا را ارسال میکند.
- خطا:
همانطور که در زیر نشان داده شده است، در پاسخ خطای Response Sent to Client که توسط Apigee Edge ارسال شده است، این خطا را مشاهده خواهید کرد:

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

به مقدار زیر توجه کنید:
هدرهای خطا ارزش کد خطای X-Apigee protocol.http.TooBigHeadersمنبع گسل X-Apigee targetمحتوای خطا: بدنه {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
انجینکس
برای تشخیص خطا با استفاده از گزارشهای دسترسی 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.TooBigHeadersوجود دارد یا خیر، یا اینکه آیا درخواستهایی وجود دارد که هنوز با خطای502با شکست مواجه میشوند. اگر هرگونه خطای
502با X-Apigee-fault-code که با مقدارprotocol.http.TooBigHeadersمطابقت دارد، پیدا کردید، مقدار X-Apigee-fault-source را تعیین کنید.نمونه خطای ۵۰۲ از لاگ دسترسی NGINX:

ورودی نمونه بالا از لاگ دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:
هدرهای خطا ارزش کد خطای X-Apigee protocol.http.TooBigHeadersمنبع گسل X-Apigee target
علت: اندازه هدرها در پاسخ بیشتر از حد مجاز است
تشخیص
- کد خطا ، منبع خطا و اندازه بار پاسخ را برای خطای مشاهده شده با استفاده از API Monitoring، ابزار Trace یا گزارشهای NGINX Access همانطور که در مراحل تشخیص مشترک توضیح داده شده است، تعیین کنید.
- اگر منبع خطا مقدار
targetداشته باشد، نشان میدهد که پاسخ ارسالی توسط سرور target/backend به Apigee دارای هدرهایی است که اندازه آنها بزرگتر از حد مجاز در Apigee Edge است. - شما میتوانید با استفاده از یکی از روشهای زیر، تأیید کنید که پاسخ دریافتی از target/backend دارای هدرهایی است که اندازه آنها از حد مجاز بیشتر است:
پیام خطا
برای اعتبارسنجی با استفاده از پیام خطا:
اگر به پیام خطای کامل دریافتی از Apigee Edge دسترسی دارید، به
faultstringمراجعه کنید.faultstringنشان میدهد که اندازه هدر پاسخ از حد مجاز فراتر رفته است.نمونه پیام خطا:
"faultstring":"response headers size exceeding 25,600"
در پیام خطای بالا، در
faultstringتوجه داشته باشید که پاسخ دارای هدرهایی است که اندازه کل آنها از حد مجاز فراتر رفته است.درخواست واقعی
برای اعتبارسنجی با استفاده از درخواست واقعی:
اگر به درخواست واقعی ارسال شده به سرور هدف/backend دسترسی دارید، مراحل زیر را انجام دهید:
- اگر شما یک کاربر ابر عمومی/ابر خصوصی هستید، مستقیماً از خود سرور بکاند یا هر دستگاه دیگری که از آنجا مجاز به ارسال درخواست به سرور بکاند هستید، درخواستی به سرور بکاند ارسال کنید.
- اگر شما یک کاربر ابر خصوصی هستید، میتوانید درخواست را از طریق یکی از پردازندههای پیام به سرور backend نیز ارسال کنید.
- پاسخ دریافتی از سرور backend را بررسی کنید و به طور خاص اندازه کل هدرهای ارسالی در پاسخ را محاسبه و تأیید کنید.
اگر متوجه شدید که اندازه هدرها در payload پاسخ بیشتر از حد مجاز در 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 فراتر میرود.
گزارشهای پردازنده پیام
برای اعتبارسنجی با استفاده از گزارشهای پردازشگر پیام:
اگر شما یک کاربر Private Cloud هستید، میتوانید از گزارشهای Message Processor برای تأیید اینکه آیا اندازه هدرهای پاسخ از حد مجاز در Apigee Edge فراتر رفته است یا خیر، استفاده کنید.
لاگهای پردازشگر پیام را بررسی کنید:
/opt/apigee/var/log/edge-message-processor/logs/system.log- جستجو کنید تا ببینید آیا در یک بازه زمانی خاص خطای
502وجود دارد (اگر مشکل در گذشته رخ داده است) یا آیا درخواستهایی وجود دارد که هنوز با خطای502مواجه میشوند یا خیر. میتوانید از عبارت جستجوی زیر استفاده کنید:grep -ri "response headers size exceeding"
- خطوطی مشابه زیر را در
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)
به محض اینکه پردازنده پیام، پاسخ را از سرور backend/target دریافت کند و متوجه شود که اندازه کل هدرها از 25 کیلوبایت بیشتر است، متوقف شده و خطای زیر را نمایش میدهد:
response headers size exceeding 25,600این نشان میدهد که اندازه کل هدر بیش از ۲۵ کیلوبایت است و Apigee وقتی اندازه شروع به فراتر رفتن از حد مجاز ۲۵ کیلوبایت میکند، خطا را با کد خطا به صورت
protocol.http.TooBigHeadersنمایش میدهد.
وضوح تصویر
اندازه را ثابت کنید
گزینه شماره ۱ [توصیه شده]: برنامه سرور هدف را طوری تنظیم کنید که اندازه هدرها از حد مجاز Apigee تجاوز نکند
- دلیل ارسال اندازه هدر پاسخ بیشتر از حد مجاز تعریف شده در Limits توسط سرور هدف خاص را تجزیه و تحلیل کنید.
- اگر مطلوب نیست، برنامه سرور backend خود را طوری تغییر دهید که هدرهای پاسخی را ارسال کند که اندازه آنها کمتر از حد مجاز در Apigee Edge باشد.
- بررسی کنید که آیا اطلاعات هدر میتواند به عنوان بخشی از بدنه پاسخ ارسال شود یا خیر.
- در صورت امکان، هرگونه اطلاعات حجیمی را که قصد ارسال آن را داشتید، به عنوان بخشی از هدر در بدنه پاسخ ارسال کنید. این کار تضمین میکند که از محدودیت هدر پاسخ تجاوز نخواهید کرد.
سی دبلیو سی
گزینه شماره ۲: استفاده از ویژگی CwC برای افزایش محدودیت اندازه هدر پاسخ
Apigee یک ویژگی CwC ارائه میدهد که به آن اجازه میدهد محدودیت اندازه هدرهای پاسخ را افزایش دهد. برای جزئیات بیشتر به پیکربندی محدودیتها برای پردازنده پیام مراجعه کنید.
محدودیتها
شرکت Apigee انتظار دارد که برنامهی کلاینت و سرور backend اندازهی هدرهایی بزرگتر از حد مجاز، همانطور که برای اندازهی هدر درخواست/پاسخ در Apigee Edge Limits مستند شده است، ارسال نکنند.
- اگر شما یک کاربر ابر عمومی هستید، حداکثر اندازه هدرهای درخواست و پاسخ مطابق با اندازه هدر درخواست/پاسخ در Apigee Edge Limits مستند شده است.
- اگر شما یک کاربر Private Cloud هستید، ممکن است حداکثر اندازه پیشفرض هدرهای درخواست و پاسخ را تغییر داده باشید (هرچند که این یک روش توصیه شده نیست). میتوانید حداکثر اندازه هدر پاسخ را با دنبال کردن دستورالعملهای موجود در بخش «نحوه بررسی محدودیت فعلی» تعیین کنید.
چگونه حد فعلی را بررسی کنیم؟
این بخش توضیح میدهد که چگونه میتوان تأیید کرد که ویژگی HTTPResponse.headers.limit با مقدار جدیدی در پردازندههای پیام بهروزرسانی شده است.
- در دستگاه پردازشگر پیام، در دایرکتوری
/opt/apigee/edge-message-processor/confبه دنبال ویژگیHTTPResponse.headers.limitبگردید و بررسی کنید که چه مقداری مطابق شکل زیر تنظیم شده است:grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- نتیجه نمونه از دستور بالا به شرح زیر است:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
در خروجی مثال بالا، توجه داشته باشید که ویژگی
HTTPResponse.headers.limitبا مقدار25kدرhttp.propertiesتنظیم شده است.این نشان میدهد که محدودیت اندازهی بار دادهی پاسخ پیکربندیشده در Apigee برای ابر خصوصی ، ۲۵ کیلوبایت است.
اگر هنوز به هرگونه کمکی از پشتیبانی Apigee نیاز دارید، به بخش «باید اطلاعات تشخیصی را جمعآوری کنید» بروید.
باید اطلاعات تشخیصی جمعآوری کند
اطلاعات تشخیصی زیر را جمعآوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:
اگر کاربر فضای ابری عمومی هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط
- نام پروکسی API
- دستور
curlکامل که برای بازتولید خطای502استفاده میشود - فایل ردیابی برای درخواستهای API
- خروجی کامل پاسخ از سرور هدف/بکاند به همراه اندازه هدرها
اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:
- پیام خطای کامل مشاهده شده برای درخواستهای ناموفق
- نام سازمان
- نام محیط
- بسته پروکسی API
- فایل ردیابی برای درخواستهای ناموفق 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