درحال مشاهده اسناد 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 )
- [ Body ]
خط درخواست از سه بخش تشکیل شده است، همانطور که در زیر نشان داده شده است.
Request-Line = <Method> <Request-URI> <HTTP-Version>
وقتی برنامه کارخواه درخواستی HTTP به سرور ارسال میکند، اولین خطی که به سرور میرود حاوی خط درخواست است که در بالا توضیح داده شد. این بخش با سرایندها و بدنه/بار درخواست دنبال میشود.
نماگرفت نمونه زیر یک درخواست curl معمولی، بخش درخواست (همراه با «خط درخواست») و بخش پاسخ را نشان میدهد.
آشنایی با اندازه «درخواست خط»
- در نمونهای که در بالا بحث شد، خط شروع (خط اول) در درخواست، که بهعنوان خط درخواست نیز شناخته میشود، به این صورت است:
GET /test/ HTTP/1.1
اندازه «خط درخواست»
~19 bytesاست زیرا حاوی19 ASCII charactersاست. ازآنجاییکه این مقدار در محدوده مجاز در Apigee Edge است، درخواست بدون هیچ خطایی پردازش میشود و پاسخ موفقیتآمیزی دریافت میکنید. - بههمین ترتیب، اگر به
faultstringدر پیام خطا نشاندادهشده در بالا نگاه کنید، حاوی"request line size exceeding 7,168"است. این نشان میدهد که «خط درخواست» در درخواست HTTP که توسط مشتری ایجاد شده است از ۷٬۱۶۸ بایت فراتر رفته است.
در اینجا دلایل احتمالی این خطا آورده شده است:
| علت | شرح | دستورالعملهای عیبیابی برای موارد زیر قابلاجرا است |
|---|---|---|
| اندازه پایهبار درخواست از حد مجاز بیشتر است | اندازه «نشانی وب درخواست» که برنامه کارخواه بهعنوان بخشی از درخواست HTTP به Apigee Edge ارسال میکند از حد مجاز در Apigee Edge بیشتر است. | کاربران «فضای ابری خصوصی و عمومی لبهای» |
مراحل متداول تشخیص خرابی
برای تشخیص این خطا، از یکی از ابزارها/تکنیکهای زیر استفاده کنید:
پایش میانای برنامهسازی کاربردی
برای تشخیص خطا بااستفاده از «پایش API»:
- بهعنوان کاربری با نقش مناسب به سیستم Apigee Edge UI وارد شوید.
به سازمانی که میخواهید مشکل را در آن بررسی کنید بروید.
- به صفحه تجزیهوتحلیل > پایش API > بررسی پیمایش کنید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کردهاید انتخاب کنید.
- رسم کد خطا دربرابر زمان.
- سلولی را که کد خطای
protocol.http.TooBigLineو کد وضعیت414را دارد، همانطور که در زیر نشان داده شده است انتخاب کنید:
اطلاعات مربوط به کد خطای
protocol.http.TooBiglineرا همانطور که در زیر نشان داده شده است خواهید دید:
روی مشاهده گزارشها کلیک کنید و ردیف درخواست ناموفق را ازهم باز کنید:
از پنجره گزارشها، جزئیات زیر را یادداشت کنید:
- کد وضعیت:
414 - منبع خطا:
apigee - کد خطا:
protocol.http.TooBigLine. - طول درخواست(بایت):
7244 (> 7KB)
- کد وضعیت:
- اگر منبع خطا مقدار
apigeeیاMPداشته باشد، کد خطا مقدارprotocol.http.TooBigLineداشته باشد و طول درخواست بیشتر از ۷ کیلوبایت باشد، این نشان میدهد که درخواست HTTP از مشتری دارای نشانی وب درخواست بزرگتر از حد مجاز در Apigee است.
ابزار ردیابی
NGINX
برای تشخیص خطا بااستفاده از گزارشهای دسترسی NGINX:
- اگر کاربر «ابر خصوصی» هستید، میتوانید از گزارشهای دسترسی NGINX برای
تعیین اطلاعات کلیدی درباره خطاهای
414HTTP استفاده کنید. گزارشهای دسترسی 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-fault-code protocol.http.TooBigLineX-Apigee-fault-source policyبه «طول درخواست» توجه کنید:
7244(۷٫۲۴۴ کیلوبایت > حد مجاز)
دلیل: اندازه پایهبار درخواست از حد مجاز بیشتر است
تشخیص
- کد خطا، منبع خطا، و اندازه طول درخواست را برای خطای مشاهدهشده بااستفاده از «پایش میانای برنامهسازی کاربردی»، «ابزار ردیابی»، یا گزارشهای «دسترسی NGINX» که در مراحل تشخیص خرابی رایج توضیح داده شده است تعیین کنید.
- اگر منبع خطا مقدار
apigeeیاMPداشته باشد، این یعنی اندازه درخواست ارسالی ازسوی برنامه کلاینت به Apigee بزرگتر از حد مجاز در Apigee Edge است. - میتوانید بااستفاده از یکی از روشهای زیر تأیید کنید که اندازه خط درخواست از حد مجاز ۷ کیلوبایت فراتر رفته است:
پیام خطا
برای راستیآزمایی بااستفاده از پیام خطا:
اگر به پیام خطای کامل دریافتی از Apigee Edge دسترسی دارید، به
faultstringمراجعه کنید. faultstringنشان میدهد که اندازه «خط درخواست» از حد مجاز ۷ کیلوبایت فراتر رفته است.پیام خطای نمونه:
"faultstring":"request line size exceeding 7,168"
درخواست واقعی
برای اعتبارسنجی بااستفاده از درخواست واقعی:
اگر به درخواست واقعی که توسط برنامه مشتری ایجاد شده است دسترسی دارید، مراحل زیر را انجام دهید:
- اندازه نشانی وب منتقلشده در درخواست را درستیسنجی کنید.
اگر متوجه شدید که اندازه URI بیشتر از حد مجاز در Apigee Edge است، پس این دلیل بروز مشکل است.
درخواست نمونه:
curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
در مورد بالا، مقدار پارامتر پُرسمان
qparamبزرگتر از ۷ کیلوبایت است، یعنی حاوی بیشاز ۷ هزار نویسه ASCII است.اگر از کارخواه دیگری استفاده میکنید، میتوانید گزارشهای کارخواه را مرور کنید و اندازه خط درخواست ارسالی به Apigee Edge را پیدا کنید.
گزارشهای «پردازشگر پیام»
برای اعتبارسنجی بااستفاده از گزارشهای «پردازشگر پیام»:
اگر کاربر «ابر خصوصی» هستید، میتوانید از گزارشهای «پردازشگر پیام» برای اعتبارسنجی اینکه آیا اندازه «خط درخواست» از حد مجاز در 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در پیام خطای بالا نشان میدهد که اندازه «شناسه منبع یکنواخت درخواست» بیشتر از ۷ کیلوبایت است. بنابراین، Apigee Edge استثنایcom.apigee.errors.http.user.RequestURITooLongرا ایجاد میکند و414کد وضعیت را با کد خطایprotocol.http.TooBiglineبه برنامههای مشتری برمیگرداند.
وضوح
اندازه ثابت
گزینه ۱ [توصیهشده]: برنامه کارخواه را اصلاح کنید تا اندازه نشانی وب درخواست را بیشتر از حد مجاز ارسال نکند
- دلیل ارسال اندازه نشانی وب درخواست توسط مشتری خاص را که بیشتر از حد مجاز تعریفشده در محدودیتها است تجزیهوتحلیل کنید.
اگر مطلوب نیست، برنامه کلاینتتان را اصلاح کنید تا اندازه نشانی وب درخواست ارسالی آن کمتر از حد مجاز باشد.
در مثال بالا، میتوانید با ارسال پارامتر پُرسمان طولانی بهعنوان بخشی از بدنه/بار درخواست بهجای ارسال آن بهعنوان بخشی از نشانی وب درخواست، همانطور که در زیر نشان داده شده است، مشکل را برطرف کنید:
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v- اگر مطلوب است و میخواهید نشانی وب را بیشتر از حد مجاز ارسال کنید، به گزینههای بعدی بروید.
CwC
گزینه شماره ۲ : استفاده از دارایی CwC برای افزایش محدودیت خط درخواست
Apigee دارایی CwC را ارائه میدهد که به آن اجازه میدهد حد اندازه خط درخواست را افزایش دهد. برای جزئیات، تنظیم محدودیت خط درخواست در «پردازشگر پیام» را ببینید
محدودیتها
Apigee انتظار دارد که برنامه کارخواه و سرور پشتیبان «خطوط درخواست/پاسخ» با اندازههای بزرگتر از حد مجاز را که در محدودیت خط درخواست/پاسخ در محدودیتهای Apigee Edge مستند شده است ارسال نکنند.
- اگر کاربر «ابر عمومی» هستید، حداکثر محدودیت برای اندازه «خط درخواست و پاسخ» همانطور که برای اندازه «خط درخواست/پاسخ» در محدودیتهای Apigee Edge مستند شده است.
- اگر کاربر «ابر خصوصی» هستید، ممکن است حد حداکثر پیشفرض برای اندازه «خط درخواست و پاسخ» را تغییر داده باشید (اگرچه این کار توصیه نمیشود). با دنبال کردن دستورالعملهای نحوه بررسی حد کنونی میتوانید حد حداکثر اندازه «خط درخواست» را تعیین کنید.
چگونه حد فعلی را بررسی کنیم؟
این بخش توضیح میدهد که چگونه درستیسنجی کنید دارایی 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 برای Private Cloud ۷ کیلوبایت است.
اگر هنوز به کمک «پشتیبانی Apigee» نیاز دارید، به باید اطلاعات تشخیصی را جمعآوری کنید بروید.
باید اطلاعات تشخیص خرابی را جمعآوری کند
اطلاعات تشخیص خرابی زیر را جمعآوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:
اگر کاربر «ابر عمومی» هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط
- نام پراکسی میانای برنامهسازی کاربردی
- فرمان کامل
curlبرای بازتولید خطای414استفاده شد - فایل ردیابی برای درخواستهای 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