‫414 Request-URI Too Long - TooBigLine

درحال مشاهده اسناد 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 باشد.

قبل‌از اینکه به دلایل احتمالی این خطا نگاه کنیم، بیایید بفهمیم خط درخواست به چه معناست و چگونه اندازه آن را بررسی کنیم.

درک خط درخواست

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

  1. خط درخواست
  2. ( مجموعه سرصفحه‌های HTTP )
  3. [ Body ]

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

Request-Line = <Method> <Request-URI> <HTTP-Version>

وقتی برنامه کارخواه درخواستی HTTP به سرور ارسال می‌کند، اولین خطی که به سرور می‌رود حاوی خط درخواست است که در بالا توضیح داده شد. این بخش با سرایندها و بدنه/بار درخواست دنبال می‌شود.

نماگرفت نمونه زیر یک درخواست curl معمولی، بخش درخواست (همراه با «خط درخواست») و بخش پاسخ را نشان می‌دهد.

آشنایی با اندازه «درخواست خط»

  1. در نمونه‌ای که در بالا بحث شد، خط شروع (خط اول) در درخواست، که به‌عنوان خط درخواست نیز شناخته می‌شود، به این صورت است:
    GET /test/ HTTP/1.1

    اندازه «خط درخواست» ~19 bytes است زیرا حاوی 19 ASCII characters است. ازآنجایی‌که این مقدار در محدوده مجاز در Apigee Edge است، درخواست بدون هیچ خطایی پردازش می‌شود و پاسخ موفقیت‌آمیزی دریافت می‌کنید.

  2. به‌همین ترتیب، اگر به faultstring در پیام خطا نشان‌داده‌شده در بالا نگاه کنید، حاوی "request line size exceeding 7,168" است. این نشان می‌دهد که «خط درخواست» در درخواست HTTP که توسط مشتری ایجاد شده است از ۷٬۱۶۸ بایت فراتر رفته است.

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. از پنجره گزارش‌ها، جزئیات زیر را یادداشت کنید:

    • کد وضعیت: 414
    • منبع خطا: apigee
    • کد خطا: protocol.http.TooBigLine.
    • طول درخواست(بایت): 7244 (> 7KB)
  10. اگر منبع خطا مقدار apigee یا MP داشته باشد، کد خطا مقدار protocol.http.TooBigLine داشته باشد و طول درخواست بیشتر از ۷ کیلوبایت باشد، این نشان می‌دهد که درخواست HTTP از مشتری دارای نشانی وب درخواست بزرگ‌تر از حد مجاز در Apigee است.

ابزار ردیابی

NGINX

برای تشخیص خطا بااستفاده از گزارش‌های دسترسی NGINX:

  1. اگر کاربر «ابر خصوصی» هستید، می‌توانید از گزارش‌های دسترسی NGINX برای تعیین اطلاعات کلیدی درباره خطاهای 414 HTTP استفاده کنید.
  2. گزارش‌های دسترسی NGINX را بررسی کنید:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    مکان: ORG، ENV، و PORT# با مقادیر واقعی جایگزین می‌شوند.

  3. جستجو کنید تا ببینید آیا درطول مدت مشخصی 414 خطا وجود دارد یا نه (اگر مشکل در گذشته رخ داده است) یا اینکه آیا هنوز درخواست‌هایی با 414 ناموفق هستند یا نه.
  4. اگر خطاهای 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.TooBigLine
    X-Apigee-fault-source policy

    به «طول درخواست» توجه کنید: 7244 (۷٫۲۴۴ کیلوبایت > حد مجاز)

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

تشخیص

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

    پیام خطا

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

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

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

    "faultstring":"request line size exceeding 7,168"

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

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

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

    1. اندازه نشانی وب منتقل‌شده در درخواست را درستی‌سنجی کنید.
    2. اگر متوجه شدید که اندازه URI بیشتر از حد مجاز در Apigee Edge است، پس این دلیل بروز مشکل است.

      درخواست نمونه:

      curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
      

      در مورد بالا، مقدار پارامتر پُرسمان qparam بزرگ‌تر از ۷ کیلوبایت است، یعنی حاوی بیش‌از ۷ هزار نویسه ASCII است.

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

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

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

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

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

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

    2. جستجو کنید تا ببینید آیا درطول مدت زمانی خاص 414 خطایی رخ داده است (اگر مشکل در گذشته اتفاق افتاده است) یا اینکه آیا هنوز درخواستی با 414 ناموفق است یا نه. می‌توانید از رشته‌های جستجوی زیر استفاده کنید.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. خطوطی از 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 به برنامه‌های مشتری برمی‌گرداند.

وضوح

اندازه ثابت

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

  1. دلیل ارسال اندازه نشانی وب درخواست توسط مشتری خاص را که بیشتر از حد مجاز تعریف‌شده در محدودیت‌ها است تجزیه‌وتحلیل کنید.
  2. اگر مطلوب نیست، برنامه کلاینتتان را اصلاح کنید تا اندازه نشانی وب درخواست ارسالی آن کمتر از حد مجاز باشد.

    در مثال بالا، می‌توانید با ارسال پارامتر پُرسمان طولانی به‌عنوان بخشی از بدنه/بار درخواست به‌جای ارسال آن به‌عنوان بخشی از نشانی وب درخواست، همان‌طور که در زیر نشان داده شده است، مشکل را برطرف کنید:

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. اگر مطلوب است و می‌خواهید نشانی وب را بیشتر از حد مجاز ارسال کنید، به گزینه‌های بعدی بروید.

CwC

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

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

محدودیت‌ها

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

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

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

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

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