شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
علامت
برنامهی کلاینت، کد وضعیت HTTP 414 Request-URI Too Long به همراه کد خطای protocol.http.TooBigLine را به عنوان پاسخی برای فراخوانیهای API دریافت میکند.
پیام خطا
برنامهی کلاینت کد پاسخ زیر را دریافت میکند:
HTTP/1.1 414 Request-URI Too Long
علاوه بر این، ممکن است پیام خطای زیر را مشاهده کنید:
{
"fault":{
"faultstring":"request line size exceeding 7,168",
"detail":{
"errorcode":"protocol.http.TooBigLine"
}
}
} توجه داشته باشید که faultstring در پیام خطای فوق شامل محدودیت مجاز برای خط درخواست در Apigee Edge است که 7168 bytes (۷ کیلوبایت) است.
علل احتمالی
این خطا زمانی رخ میدهد که اندازه خط درخواست ارسالی توسط برنامه کلاینت به Apigee Edge به عنوان بخشی از درخواست HTTP، بزرگتر از حد مجاز در Apigee Edge باشد.
قبل از اینکه به دلایل احتمالی این خطا بپردازیم، بیایید بفهمیم منظور از خط درخواست چیست و چگونه میتوان اندازه آن را بررسی کرد.
درک خط درخواست
یک درخواست HTTP معمولی از سه بخش تشکیل شده است:
- خط درخواست
- (مجموعهای از هدرهای HTTP)
- [بدن]
خط درخواست از سه بخش تشکیل شده است که در زیر نشان داده شده است.
Request-Line = <Method> <Request-URI> <HTTP-Version>
وقتی یک درخواست HTTP توسط برنامه کلاینت به سرور ارسال میشود، اولین خطی که به سرور میرود شامل خط درخواستی است که در بالا توضیح داده شد. به دنبال آن هدرها و بدنه/بار درخواست قرار میگیرند.
تصویر نمونه زیر یک درخواست معمولی curl ، بخش Request (همراه با Request-Line) و بخش Response را نشان میدهد.

درک اندازه خط درخواست
- در نمونهای که در بالا مورد بحث قرار گرفت، خط شروع (خط اول) در درخواست، که به عنوان Request-Line نیز شناخته میشود، به شرح زیر است:
GET /test/ HTTP/1.1
اندازه خط درخواست
~19 bytesاست زیرا شامل19 ASCII charactersاست. از آنجایی که این مقدار در محدوده مجاز Apigee Edge است، درخواست بدون هیچ خطایی پردازش میشود و پاسخ موفقیتآمیزی دریافت میکنید. - به طور مشابه، اگر به
faultstringدر پیام خطای نشان داده شده در بالا نگاه کنید، حاوی"request line size exceeding 7,168"است. این نشان میدهد که خط درخواست در درخواست HTTP ارسال شده توسط کلاینت از 7,168 بایت فراتر رفته است.
در اینجا علل احتمالی این خطا آورده شده است:
| علت | توضیحات | دستورالعملهای عیبیابی قابل اجرا برای |
|---|---|---|
| حجم درخواست بیشتر از حد مجاز است | اندازه Request-URI ارسال شده توسط برنامه کلاینت به عنوان بخشی از درخواست HTTP به Apigee Edge از حد مجاز در Apigee Edge بیشتر است. | کاربران فضای ابری عمومی و خصوصی Edge |
مراحل تشخیص مشترک
برای تشخیص این خطا از یکی از ابزارها/تکنیکهای زیر استفاده کنید:
نظارت بر API
برای تشخیص خطا با استفاده از مانیتورینگ API:
- به عنوان کاربری با نقش کاربری مناسب، وارد Apigee Edge UI شوید .
به سازمانی که میخواهید مشکل را در آن بررسی کنید، مراجعه کنید.

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

از پنجره Logs ، جزئیات زیر را یادداشت کنید:
- کد وضعیت:
414 - منبع گسل:
apigee - کد خطا:
protocol.http.TooBigLine. - طول درخواست (بایت):
7244 (> 7KB)
- کد وضعیت:
- اگر منبع خطا (Fault Source) مقدار
apigeeیاMPداشته باشد، کد خطا (Fault Code) مقدارprotocol.http.TooBigLineرا داشته باشد و Request-Length بیش از ۷ کیلوبایت باشد، این نشان میدهد که درخواست HTTP از کلاینت دارای یک آدرس اینترنتی (URI) درخواستی بزرگتر از حد مجاز در Apigee است.
ابزار ردیابی
انجینکس
برای تشخیص خطا با استفاده از گزارشهای دسترسی NGINX:
- اگر شما یک کاربر Private Cloud هستید، میتوانید از گزارشهای دسترسی NGINX برای تعیین اطلاعات کلیدی در مورد خطاهای HTTP
414استفاده کنید. گزارشهای دسترسی NGINX را بررسی کنید:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_logکه در آن: ORG ، ENV و PORT# با مقادیر واقعی جایگزین شدهاند.
- جستجو کنید تا ببینید آیا در یک بازه زمانی خاص خطای
414وجود دارد (اگر مشکل در گذشته رخ داده است) یا اینکه آیا درخواستهایی با414هنوز با شکست مواجه شدهاند یا خیر. اگر هرگونه خطای
414با کد خطای 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 policyبه طول درخواست توجه کنید:
7244(۷.۲۴۴ کیلوبایت > حد مجاز)
علت: اندازه بار درخواستی بیشتر از حد مجاز است
تشخیص
- کد خطا ، منبع خطا و اندازه طول درخواست را برای خطای مشاهده شده با استفاده از گزارشهای API Monitoring، Trace Tool یا NGINX Access همانطور که در مراحل تشخیص مشترک توضیح داده شده است، تعیین کنید.
- اگر منبع خطا مقدار
apigeeیاMPداشته باشد، نشان میدهد که اندازه درخواست ارسال شده توسط برنامه کلاینت به Apigee بیشتر از حد مجاز در Apigee Edge است. - شما میتوانید با استفاده از یکی از روشهای زیر تأیید کنید که اندازه خط درخواست از حد مجاز ۷ کیلوبایت فراتر رفته است:
پیام خطا
برای اعتبارسنجی با استفاده از پیام خطا:
اگر به پیام خطای کامل دریافتی از Apigee Edge دسترسی دارید، به
faultstringمراجعه کنید.faultstringنشان میدهد که اندازه خط درخواست (Request-Line) از حد مجاز ۷ کیلوبایت فراتر رفته است.نمونه پیام خطا:
"faultstring":"request line size exceeding 7,168"
درخواست واقعی
برای اعتبارسنجی با استفاده از درخواست واقعی:
اگر به درخواست واقعی ارسال شده توسط برنامه کلاینت دسترسی دارید، مراحل زیر را انجام دهید:
- اندازه URI ارسالی در درخواست را بررسی کنید.
اگر متوجه شدید که اندازه URI بیشتر از حد مجاز در Apigee Edge است، پس مشکل از همین جا ناشی میشود.
نمونه درخواست:
curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
در مورد فوق، مقدار پارامتر پرسوجوی
qparamبزرگتر از ۷ کیلوبایت است، یعنی حاوی بیش از ۷ هزار کاراکتر ASCII است.اگر از کلاینت دیگری استفاده میکنید، میتوانید لاگهای کلاینت را بررسی کنید و سعی کنید اندازه خط درخواستی که به Apigee Edge ارسال میشود را پیدا کنید.
گزارشهای پردازنده پیام
برای اعتبارسنجی با استفاده از گزارشهای پردازشگر پیام:
اگر شما یک کاربر Private Cloud هستید، میتوانید از گزارشهای Message Processor برای تأیید اینکه آیا اندازه Request-Line از حد مجاز در Apigee Edge فراتر رفته است یا خیر، استفاده کنید.
لاگهای پردازشگر پیام را بررسی کنید:
/opt/apigee/var/log/edge-message-processor/logs/system.log- جستجو کنید تا ببینید آیا در یک بازه زمانی خاص خطای
414وجود دارد (اگر مشکل در گذشته رخ داده است) یا آیا درخواستهایی وجود دارد که هنوز با خطای414مواجه میشوند. میتوانید از رشتههای جستجوی زیر استفاده کنید.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- خطوطی مشابه خطوط زیر را در
system.logخواهید یافت:2021-07-12 08:53:31,461 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:null, uri:null, message Id:null, exception:com.apigee.errors.http.user.RequestURITooLong{ code = protocol.http.TooBigLine, message = request line size exceeding 7,168, associated contexts = []}, context:Context@366f4217 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.195.90:8443 Local:192.168.67.23:34256]@301912 useCount=1 bytesRead=0 bytesWritten=45849 age=2254670ms lastIO=0ms isOpen=true)
message = request line size exceeding 7,168در پیام خطای بالا نشان میدهد که اندازه URI درخواست بیش از ۷ کیلوبایت است. بنابراین، Apigee Edge خطایcom.apigee.errors.http.user.RequestURITooLongرا صادر میکند و کد وضعیت414را با کد خطاprotocol.http.TooBiglineبه برنامههای کلاینت برمیگرداند.
وضوح تصویر
اندازه را ثابت کنید
گزینه شماره ۱ [توصیه شده]: برنامه کلاینت را طوری تنظیم کنید که درخواستهایی با اندازه URI بزرگتر از حد مجاز ارسال نکند
- دلیل اینکه کلاینت خاصی درخواست ارسال اندازه URI بیشتر از حد مجاز تعریف شده در Limits را دارد، تجزیه و تحلیل کنید.
اگر مطلوب نیست، برنامه کلاینت خود را طوری تغییر دهید که اندازه URI درخواست کمتر از حد مجاز باشد.
در مثالی که در بالا مورد بحث قرار گرفت، میتوانید با ارسال پارامتر کوئری طولانی به عنوان بخشی از بدنه/بار درخواست به جای ارسال آن به عنوان بخشی از URL درخواست، همانطور که در زیر نشان داده شده است، مشکل را برطرف کنید:
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v- اگر مطلوب است و میخواهید URI بیش از حد مجاز ارسال کنید، به گزینههای بعدی بروید.
سی دبلیو سی
گزینه شماره ۲: استفاده از ویژگی CwC برای افزایش محدودیت خط درخواست
Apigee یک ویژگی CwC ارائه میدهد که به آن اجازه میدهد محدودیت اندازه خط درخواست را افزایش دهد. برای جزئیات بیشتر به تنظیم محدودیت خط درخواست در پردازنده پیام مراجعه کنید.
محدودیتها
شرکت Apigee انتظار دارد که برنامهی کلاینت و سرور backend، خطوط درخواست / پاسخی که اندازهی آنها بزرگتر از حد مجاز ذکر شده در Apigee Edge Limits است را ارسال نکنند.
- اگر شما یک کاربر ابر عمومی هستید، حداکثر محدودیت برای اندازه خط درخواست و پاسخ، همانطور که برای اندازه خط درخواست/پاسخ در Apigee Edge Limits مستند شده است، میباشد.
- اگر شما یک کاربر ابر خصوصی هستید، ممکن است حداکثر محدودیت پیشفرض برای اندازه خط درخواست و پاسخ را تغییر داده باشید (هرچند این یک روش توصیه شده نیست). میتوانید حداکثر محدودیت اندازه خط درخواست را با دنبال کردن دستورالعملهای موجود در بخش «نحوه بررسی محدودیت فعلی» تعیین کنید.
چگونه حد فعلی را بررسی کنیم؟
این بخش توضیح میدهد که چگونه میتوان تأیید کرد که ویژگی HTTPRequest.line.limit با مقدار جدیدی در پردازندههای پیام بهروزرسانی شده است.
- در دستگاه پردازشگر پیام، ویژگی
HTTPRequest.line.limitرا در دایرکتوری/opt/apigee/edge-message-processor/confجستجو کنید و بررسی کنید که چه مقداری مطابق شکل زیر تنظیم شده است:grep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
- نتیجه نمونه از دستور بالا به شرح زیر است:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
در خروجی مثال بالا، توجه داشته باشید که ویژگی
HTTPRequest.line.limitبا مقدار7kدرhttp.propertiesتنظیم شده است.این نشان میدهد که محدودیت اندازه خط درخواست پیکربندیشده در Apigee برای ابر خصوصی ، ۷ کیلوبایت است.
اگر هنوز به هرگونه کمکی از پشتیبانی Apigee نیاز دارید، به بخش «باید اطلاعات تشخیصی را جمعآوری کنید» بروید.
باید اطلاعات تشخیصی جمعآوری کند
اطلاعات تشخیصی زیر را جمعآوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:
اگر کاربر فضای ابری عمومی هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط
- نام پروکسی API
- دستور
curlکامل که برای بازتولید خطای414استفاده میشود - فایل ردیابی برای درخواستهای API
اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:
- پیام خطای کامل مشاهده شده برای درخواستهای ناموفق
- نام سازمان
- نام محیط
- بسته پروکسی API
- فایل ردیابی برای درخواستهای ناموفق API
- دستور
curlکامل که برای بازتولید خطای414استفاده میشود گزارشهای دسترسی 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