شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
علامت
برنامهی کلاینت، کد وضعیت HTTP 502 Bad Gateway را به همراه کد خطای protocol.http.TooBigLine به عنوان پاسخی برای فراخوانیهای API دریافت میکند.
پیام خطا
برنامهی کلاینت کد پاسخ زیر را دریافت میکند:
HTTP/1.1 502 Bad Gateway
علاوه بر این، ممکن است پیام خطای زیر را مشاهده کنید:
{
"fault":{
"faultstring":"response line size exceeding 2,048",
"detail":{
"errorcode":"protocol.http.TooBigLine"
}
}
}علل احتمالی
این خطا زمانی رخ میدهد که اندازه خط پاسخ ارسالی توسط سرور هدف/بکاند به Apigee Edge به عنوان بخشی از پاسخ HTTP، بیشتر از حداکثر حد مجاز در Apigee Edge باشد.
قبل از اینکه به دلایل احتمالی این خطا بپردازیم، بیایید بفهمیم که Response-Line به چه معناست و چگونه میتوان اندازه آن را بررسی کرد.
درک خط پاسخ
یک پاسخ HTTP معمولی از سه بخش تشکیل شده است:
- خط وضعیت (که در زبان Apigee به آن خط پاسخ میگویند)
- (مجموعهای از هدرهای HTTP)
- [بدن]
خط پاسخ از سه بخش تشکیل شده است: نسخه پروتکل و به دنبال آن یک کد وضعیت عددی و عبارت متنی مرتبط با آن، همانطور که در زیر نشان داده شده است:
Response-Line = <HTTP-Version> <Status-Code> <Reason-Phrase>
وقتی یک پاسخ HTTP توسط برنامه سرور هدف/بکاند ارسال میشود، اولین خطی که ارسال میشود، نشاندهنده خط پاسخ ( Response-Line) است که در بالا توضیح داده شد. به دنبال آن هدرها و بدنه/بار پاسخ (response body/payload) قرار میگیرند. تصویر نمونه زیر یک درخواست معمولی curl ، بخش درخواست (Request ) و بخش پاسخ (Response) (همراه با خط پاسخ) را نشان میدهد.

درک اندازه خط پاسخ
در نمونه مورد بحث در بالا، خط شروع (خط اول) در پاسخ که به آن خط پاسخ نیز گفته میشود، به شرح زیر است:
HTTP/1.1 200 OK
این خط پاسخ، اندازهای در حدود
~15 bytesدارد، زیرا شامل15 ASCII charactersاست. از آنجایی که این مقدار در محدوده مجاز Apigee Edge است، پاسخ بدون هیچ خطایی توسط Apigee Edge به کلاینت ارسال میشود.- به طور مشابه، اگر به
faultstringدر پیام خطای نشان داده شده در بالا نگاه کنید، شامل"response line size exceeding 2,048"است. این نشان میدهد که خط پاسخ در پاسخ HTTP ارسال شده توسط سرور هدف/backend از 2,048 بایت فراتر رفته است.
درک خط پاسخ بزرگ
طبق تعریف خط وضعیت (که در اینجا به آن خط پاسخ گفته میشود) و درخواستها و پاسخهای HTTP معمولی، اندازه بسیار کوچکتر از حد پیشفرض تعریف شده ۲ کیلوبایت در Apigee Edge خواهد بود، بنابراین ممکن است به این حد نرسیم. با این حال، در اینجا چند سناریوی ممکن وجود دارد که ممکن است از این حد تجاوز کنید:
- سرور هدف/backend یک سیستم HTTP نیست. ممکن است با پاسخی غیر از HTTP پاسخ دهد.
- سرور هدف/پشتیبان دارای مشکلاتی است و یک خط پاسخ طولانی را به عنوان بخشی از پاسخ HTTP ارسال میکند.
برای اطلاعات بیشتر در این مورد به Getting error protocol.http.TooBigLine مراجعه کنید، "اندازه خط پاسخ بیش از 2,048 است ."
در اینجا علل احتمالی خطا آورده شده است:
| علت | توضیحات | دستورالعملهای عیبیابی قابل اجرا برای |
|---|---|---|
| اندازه خط پاسخ بزرگتر از حد مجاز است | اندازه خط پاسخ ارسال شده توسط سرور هدف/بکاند به عنوان بخشی از پاسخ HTTP به Apigee Edge بیشتر از حد مجاز در Apigee Edge است. | کاربران فضای ابری عمومی و خصوصی Edge |
مراحل تشخیص مشترک
برای تشخیص این خطا از یکی از ابزارها/تکنیکهای زیر استفاده کنید:
نظارت بر API
برای تشخیص خطا با استفاده از مانیتورینگ API:
- به عنوان کاربری با نقش کاربری مناسب، وارد Apigee Edge UI شوید .
به سازمانی که میخواهید مشکل را در آن بررسی کنید، مراجعه کنید.

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

- از پنجره Logs ، جزئیات زیر را یادداشت کنید:
- کد وضعیت:
502 - منبع خطا:
target - کد خطا:
protocol.http.TooBigLine.
- کد وضعیت:
- اگر منبع خطا مقدار
targetو کد خطا مقدارprotocol.http.TooBigLineداشته باشد، نشان میدهد که پاسخ HTTP از سرور target/backend دارای اندازه خط پاسخ بزرگتر از حداکثر حد مجاز در Apigee Edge است.
ابزار ردیابی
- جلسه ردیابی را فعال کنید و یکی از موارد زیر را انجام دهید:
- منتظر بمانید تا خطای
502 Bad Gatewayرخ دهد. یا - اگر میتوانید مشکل را دوباره ایجاد کنید، فراخوانی API را انجام دهید و خطای
502 Bad Gatewayرا دوباره ایجاد کنید.
- منتظر بمانید تا خطای
- یکی از درخواستهای ناموفق را انتخاب کنید و مسیر پیگیری را بررسی کنید.
- مراحل مختلف ردیابی را طی کنید و محل وقوع خرابی را پیدا کنید.
معمولاً خطا را درست پس از ارسال درخواست به سرور هدف، مطابق شکل زیر، در قسمت خطای
flowinfoمشاهده خواهید کرد:
به مقادیر خطا از ردیابی توجه کنید:
- خطا:
response line exceeding 2,048 - کلاس خطا :
com.apigee.errors.http.server.BadGateway
این نشان میدهد که Apigee Edge (مؤلفه پردازنده پیام) به محض دریافت پاسخ از سرور backend به دلیل تجاوز اندازه خط پاسخ از حد مجاز، خطا را ارسال میکند.
- خطا:
همانطور که در زیر نشان داده شده است، پیام خطایی را که در مرحله پاسخ ارسال شده به کلاینت به کلاینت ارسال میشود، مشاهده خواهید کرد:

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

به مقدار زیر توجه کنید:
درخواست سربرگها ارزش کد خطای X-Apigee protocol.http.TooBigLineمنبع گسل X-Apigee targetمحتوای خطا: بدنه {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
انجینکس
برای تشخیص خطا با استفاده از گزارشهای دسترسی NGINX:
- اگر شما یک کاربر Private Cloud هستید، میتوانید از گزارشهای دسترسی NGINX برای تعیین اطلاعات کلیدی در مورد خطاهای HTTP
502استفاده کنید. گزارشهای دسترسی NGINX را بررسی کنید:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_logکه در آن: ORG ، ENV و PORT# با مقادیر واقعی جایگزین شدهاند.
- جستجو کنید تا ببینید آیا در یک بازه زمانی خاص خطای
502وجود دارد یا خیر (اگر مشکل در گذشته رخ داده است) یا اینکه آیا درخواستهایی وجود دارد که هنوز با خطای502مواجه میشوند. اگر هرگونه خطای
502با کد خطای X-Apigee-fault-code که با مقدارprotocol.http.TooBigLineمطابقت دارد، پیدا کردید، مقدار منبع خطای X-Apigee-fault-source را تعیین کنید.
ورودی نمونه بالا از لاگ دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:
هدرهای پاسخ ارزش کد خطای X-Apigee protocol.http.TooBigLineمنبع گسل X-Apigee target
علت: اندازه خط پاسخ بزرگتر از حد مجاز است.
تشخیص
- کد خطا و منبع خطا را برای خطای مشاهده شده با استفاده از API Monitoring، ابزار Trace یا گزارشهای دسترسی NGINX، همانطور که در مراحل تشخیص مشترک توضیح داده شده است، تعیین کنید.
- اگر منبع خطا مقدار
targetداشته باشد، نشان میدهد که اندازه خط پاسخ ارسال شده توسط برنامه سرور target/backend به Apigee بیشتر از حد مجاز در Apigee Edge است. شما میتوانید با استفاده از یکی از روشهای زیر تأیید کنید که اندازه خط پاسخ از حد مجاز ۲ کیلوبایت فراتر رفته است:
پیام خطا
برای اعتبارسنجی با استفاده از پیام خطا:
اگر به پیام خطای کامل دریافتی از Apigee Edge دسترسی دارید، به
faultstringمراجعه کنید.نمونه پیام خطا:
"faultstring":"response line size exceeding 2,048"
faultstringفوق نشان میدهد که اندازه خط پاسخ از حد مجاز ۲ کیلوبایت فراتر رفته است.درخواست واقعی
برای اعتبارسنجی با استفاده از درخواست واقعی:
اگر به درخواست واقعی ارسال شده به برنامه سرور هدف/بکاند دسترسی دارید، مراحل زیر را انجام دهید:
- اندازه خط پاسخ را بررسی کنید
- اگر متوجه شدید که اندازه URI بیشتر از حد مجاز در Apigee Edge است، پس مشکل از همین جا ناشی میشود.
نمونه پاسخ از سرور هدف/بکاند:
curl -v http://HOSTALIAS/test
* Trying 3.2.1.4... * TCP_NODELAY set * Connected to <hostalias> (3.2.1.4) port 80 (#0) > GET /test HTTP/1.1 > Host: HOSTALIAS > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 1111…<trimmed>...11111111 < Date: Mon, 26 Jul 2021 07:07:18 GMT < Content-Type: application/json < Content-Length: 269 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < { <Response Body> } * Connection #0 to host <hostalias> left intact * Closing connection 0
در مورد فوق، خط پاسخ
HTTP/1.1 200 1111…<trimmed>...11111111بزرگتر از ۲ کیلوبایت است، یعنی حاوی بیش از ۲ هزار کاراکتر ASCII است.اگر از کلاینت دیگری استفاده میکنید، میتوانید لاگهای کلاینت را بررسی کنید و سعی کنید اندازه خط پاسخی که به Apigee Edge ارسال میشود را پیدا کنید.
گزارشهای پردازنده پیام
برای اعتبارسنجی با استفاده از گزارشهای پردازشگر پیام:
اگر شما یک کاربر Private Cloud هستید، میتوانید از گزارشهای Message Processor برای تأیید اینکه آیا اندازه خط پاسخ از حد مجاز در Apigee Edge فراتر رفته است یا خیر، استفاده کنید.
- شناسه پیام درخواست ناموفق را با استفاده از API Monitoring، ابزار Trace یا گزارشهای دسترسی NGINX، همانطور که در مراحل تشخیص مشترک توضیح داده شده است، تعیین کنید.
شناسه پیام را در گزارش پردازشگر پیام جستجو کنید:
/opt/apigee/var/log/edge-message-processor/logs/system.logخطوطی مشابه خطوط زیر را در
system.logخواهید یافت:2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592 useCount=1 bytesRead=0 bytesWritten=201 age=144ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048 at <snipped> 2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
message = response line size exceeding 2,048در پیام خطای بالا نشان میدهد که اندازه خط پاسخ بیش از 2 کیلوبایت است. بنابراین، Apigee Edge استثنا را صادر میکند و کد وضعیت502را با کد خطاprotocol.http.TooBiglineبه برنامههای کلاینت برمیگرداند.
وضوح تصویر
اندازه را ثابت کنید
گزینه شماره ۱ [توصیه شده]: برنامه سرور هدف/بکاند را طوری تنظیم کنید که خطوط پاسخ با اندازه بزرگتر از حد مجاز ارسال نکند.
- دلیل ارسال خط پاسخ (Response-Line) با اندازهای بیش از حد مجاز، همانطور که در Limits تعریف شده است، توسط یک کلاینت خاص را تجزیه و تحلیل کنید.
- اگر مطلوب نیست، برنامه سرور هدف/بکاند خود را طوری تغییر دهید که یک خط پاسخ با اندازه کمتر از حد مجاز ارسال کند.
- اگر مطلوب است و میخواهید یک خط پاسخ با اندازهای بیشتر از حد مجاز ارسال کنید، به گزینههای بعدی بروید.
سی دبلیو سی
گزینه شماره ۲: استفاده از ویژگی CwC برای افزایش محدودیت خط پاسخ
Apigee یک ویژگی CwC ارائه میدهد که به آن اجازه میدهد محدودیت اندازه خط پاسخ را افزایش دهد. برای جزئیات بیشتر، به تنظیم محدودیت خط پاسخ در پردازنده پیام مراجعه کنید.
محدودیتها
شرکت Apigee انتظار دارد که برنامهی کلاینت و سرور backend، خطوط درخواست / پاسخی که اندازهی آنها بزرگتر از حد مجاز ذکر شده در Apigee Edge Limits است را ارسال نکنند.
- اگر شما یک کاربر ابر عمومی هستید، حداکثر محدودیت برای اندازه خط درخواست و پاسخ، همانطور که برای اندازه خط درخواست/پاسخ در Apigee Edge Limits مستند شده است، میباشد.
- اگر شما یک کاربر Private Cloud هستید، ممکن است حداکثر محدودیت پیشفرض برای اندازه خط درخواست و پاسخ را تغییر داده باشید (هرچند که این یک روش توصیه شده نیست). میتوانید حداکثر محدودیت اندازه خط پاسخ را با دنبال کردن دستورالعملهای موجود در بخش «نحوه بررسی محدودیت فعلی» تعیین کنید.
چگونه حد فعلی را بررسی کنیم؟
این بخش توضیح میدهد که چگونه میتوان تأیید کرد که ویژگی HTTPResponse.line.limit با مقدار جدیدی در پردازندههای پیام بهروزرسانی شده است.
- در دستگاه پردازشگر پیام، در دایرکتوری
/opt/apigee/edge-message-processor/confبه دنبال ویژگیHTTPResponse.line.limitبگردید و بررسی کنید که چه مقداری مطابق شکل زیر تنظیم شده است:grep -ri "HTTPResponse.line.limit" /opt/apigee/edge-message-processor/conf
- نتیجه نمونه از دستور بالا به شرح زیر است:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
در خروجی مثال بالا، توجه کنید که ویژگی
HTTPResponse.line.limitبا مقدار2kدر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