414 درخواست-URI خیلی طولانی - TooBigLine

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

علامت

برنامه سرویس گیرنده یک کد وضعیت HTTP 414 Request-URI Too Long با protocol.http.TooBigLine کد خطا دریافت می کند.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 (7 کیلوبایت) است.

علل احتمالی

این خطا در صورتی رخ می دهد که اندازه خط درخواست ارسال شده توسط برنامه مشتری به Apigee Edge به عنوان بخشی از درخواست HTTP از حد مجاز در Apigee Edge بیشتر باشد.

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

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

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

  1. درخواست-خط
  2. ( مجموعه ای از هدرهای HTTP )
  3. [بدن]

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

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

هنگامی که یک درخواست HTTP توسط برنامه مشتری به یک سرور ارسال می شود، اولین خطی که به سرور می رود شامل Request-Line است که در بالا توضیح داده شد. این توسط سرصفحه ها و بدنه / بارگذاری درخواست دنبال می شود.

نمونه اسکرین شات زیر یک درخواست معمولی curl ، بخش Request (به همراه Request-Line) و بخش Response را نشان می دهد.

درک اندازه درخواست-خط

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

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

  2. به طور مشابه، اگر به faultstring در پیام خطا نشان داده شده در بالا نگاه کنید، حاوی "request line size exceeding 7,168" است. این نشان می دهد که Request-Line در درخواست HTTP ارائه شده توسط مشتری از 7168 بایت فراتر رفته است.

در اینجا دلایل احتمالی این خطا وجود دارد:

علت توضیحات دستورالعمل های عیب یابی قابل اجرا برای
حجم بار درخواستی بیشتر از حد مجاز است اندازه Request-URI ارسال شده توسط برنامه مشتری به عنوان بخشی از درخواست HTTP به Apigee Edge از حد مجاز در Apigee Edge بیشتر است. کاربران Edge Public و Private Cloud

مراحل تشخیص رایج

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

مانیتورینگ API

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

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

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

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

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

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

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

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

  9. از پنجره Logs به جزئیات زیر توجه کنید:

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

ابزار ردیابی

NGINX

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

  1. اگر کاربر Private Cloud هستید، می توانید از گزارش های دسترسی NGINX برای تعیین اطلاعات کلیدی مربوط به خطاهای HTTP 414 استفاده کنید.
  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 (7.244 کیلوبایت > حد مجاز)

علت: حجم بار درخواستی بیشتر از حد مجاز است

تشخیص

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

    پیغام خطا

    برای تأیید اعتبار با استفاده از پیام خطا:

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

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

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

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

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

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

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

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

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

      در حالت فوق، مقدار پارامتر query qparam بزرگتر از 7 KB است، یعنی حاوی بیش از 7 K کاراکتر ASCII است.

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

    گزارش های پردازشگر پیام

    برای تأیید اعتبار با استفاده از گزارش‌های پردازشگر پیام:

    اگر کاربر Private Cloud هستید، می‌توانید از گزارش‌های پردازشگر پیام برای تأیید اینکه اندازه درخواست خط از حد مجاز در 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 در پیام خطای بالا نشان می دهد که اندازه URI درخواست بیش از 7 کیلوبایت است. بنابراین، Apigee Edge استثنا com.apigee.errors.http.user.RequestURITooLong را پرتاب می کند و کد وضعیت 414 را با protocol.http.TooBigline کد خطا.http.TooBigline به برنامه های مشتری برمی گرداند.

قطعنامه

اندازه را ثابت کنید

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

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

    در مثالی که در بالا مورد بحث قرار گرفت، می‌توانید مشکل را با ارسال پارامتر long query به عنوان بخشی از بدنه درخواست / payload به جای ارسال آن به عنوان بخشی از URL درخواست همانطور که در زیر نشان داده شده است برطرف کنید:

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

CwC

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

Apigee یک ویژگی CwC را ارائه می دهد که به آن اجازه می دهد محدودیت اندازه خط درخواست را افزایش دهد. برای جزئیات به تنظیم محدودیت خط درخواست در پردازشگر پیام مراجعه کنید

محدودیت ها

Apigee انتظار دارد که برنامه کلاینت و سرور باطن، خطوط درخواست/پاسخی را که اندازه آنها بزرگتر از حد مجاز است، همانطور که برای محدودیت خط درخواست/پاسخ در Apigee Edge Limits مستند شده است، ارسال نکند.

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

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

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

  1. در دستگاه Message Processor، ویژگی 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 7 کیلوبایت است.

اگر همچنان به کمک پشتیبانی Apigee نیاز دارید، به Must collect information diagnostic بروید.

باید اطلاعات تشخیصی را جمع آوری کرد

اطلاعات تشخیصی زیر را جمع آوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:

اگر کاربر Public Cloud هستید، اطلاعات زیر را ارائه دهید:

  • نام سازمان
  • نام محیط زیست
  • نام پروکسی 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