414 طلب معرّف موارد منتظم (URI) طويل جدًا - OverBigLine

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

المشكلة

يحصل تطبيق العميل على رمز حالة HTTP 414 Request-URI Too Long مع رمز الخطأ protocol.http.TooBigLine كاستجابة لطلبات واجهة برمجة التطبيقات.

رسالة الخطأ

يتلقى تطبيق العميل رمز الاستجابة التالي:

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 إلى خادم، يحتوي السطر الأول الذي ينتقل إلى الخادم على سطر الطلب المذكور أعلاه. يلي ذلك العناوين وطلب النص الأساسي/الحمولة.

تعرض لقطة الشاشة التالية نموذج طلب curl وجزء الطلب (بالإضافة إلى سطر الطلب) وجزء الردّ.

فهم حجم سطر الطلب

  1. في النموذج الذي تمت مناقشته أعلاه، يكون سطر start (السطر الأول) في الطلب، والمشار إليه أيضًا باسم Request-Line، كما يلي:
    GET /test/ HTTP/1.1
    

    حجم سطر الطلب هو ~19 bytes لأنّه يحتوي على 19 ASCII characters. بما أنّ هذا الطلب يقع ضمن الحدّ المسموح به في Apigee Edge، تتمّ معالجة الطلب بدون أيّ أخطاء وستحصل على ردّ ناجح.

  2. وبالمثل إذا نظرت إلى faultstring في رسالة الخطأ الموضحة أعلاه، ستحتوي على "request line size exceeding 7,168". يشير هذا إلى أنّ سطر الطلب في طلب HTTP الذي أجراه العميل تجاوز 7,168 بايت.

في ما يلي الأسباب المحتملة لهذا الخطأ:

السبب الوصف تعليمات تحديد المشاكل وحلّها السارية على
حجم حمولة الطلب أكبر من الحد المسموح به إنّ حجم "Request-URI" الذي يرسله تطبيق العميل كجزء من طلب HTTP إلى Apigee Edge أكبر من الحد المسموح به في Apigee Edge. مستخدمو Edge العام والخاص على السحابة الإلكترونية

خطوات التشخيص الشائعة

استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:

مراقبة واجهة برمجة التطبيقات

لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:

  1. سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم لديه دور مناسب.
  2. انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.

  3. انتقل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
  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 وحجم طول الطلب أكبر من 7 كيلوبايت، ما يشير إلى أنّ طلب HTTP المقدَّم من العميل يشتمل على عنوان URI للطلب أكبر من الحد المسموح به في 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-Error-code المطابق لقيمةX-Apigee-fault-code ، حدِّد قيمة X-Apigee-fault-code

    يحتوي إدخال النموذج أعلاه من سجلّ الوصول إلى NGINX على القيم التالية للسمة X-Apigee-fault-code وX-Apigee-fault-code :

    عناوين الاستجابة القيمة
    X-Apigee-fault-code protocol.http.TooBigLine
    X-Apigee-fault-source policy

    يُرجى ملاحظة مدة الطلب: 7244 (7.244 كيلوبايت > الحد المسموح به)

السبب: حجم حمولة الطلب أكبر من الحد المسموح به

التشخيص

  1. حدِّد رمز الخطأ ومصدر الخطأ وحجم طول الطلب للخطأ الذي تم رصده باستخدام مراقبة واجهة برمجة التطبيقات أو أداة التتبُّع أو سجلات وصول NGINX كما هو موضّح في خطوات التشخيص الشائعة.
  2. إذا كانت قيمة مصدر الخطأ apigee أو MP، يعني ذلك أنّ حجم الطلب الذي أرسله تطبيق العميل إلى Apigee أكبر من الحد المسموح به في Apigee Edge.
  3. يمكنك التحقّق من أنّ حجم سطر الطلب تجاوز الحدّ الأقصى المسموح به البالغ 7 كيلوبايت باستخدام إحدى الطريقتَين التاليتَين:

    رسالة الخطأ

    للتأكُّد من استخدام رسالة الخطأ، اتّبِع الخطوات التالية:

    إذا كان بإمكانك الوصول إلى رسالة الخطأ الكاملة التي تم تلقّيها من Apigee Edge، يُرجى الرجوع إلى faultstring. تشير السمة faultstring إلى أنّ حجم سطر الطلب تجاوز الحدّ الأقصى المسموح به وهو 7 كيلوبايت.

    نموذج لرسالة خطأ:

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

    الطلب الفعلي

    للتحقّق من استخدام الطلب الفعلي:

    إذا كان بإمكانك الوصول إلى الطلب الفعلي الذي تم إجراؤه من خلال تطبيق العميل، اتّبِع الخطوات التالية:

    1. تحقق من حجم معرف الموارد المنتظم (URI) الذي تم تمريره في الطلب.
    2. إذا وجدت أنّ حجم معرّف الموارد المنتظم (URI) يتجاوز الحد المسموح به في Apigee Edge، هذا هو سبب المشكلة.

      نموذج طلب:

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

      في الحالة المذكورة أعلاه، تكون قيمة معلَمة طلب البحث qparam أكبر من 7 كيلوبايت، أي أنّها تحتوي على أكثر من 7 أحرف 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 إلى تطبيقات العميل.

درجة الدقّة

إصلاح الحجم

الخيار 1 [إجراء يُنصح به]: إصلاح تطبيق العميل لكي لا يرسل حجم عنوان URI للطلب الذي يتجاوز الحد المسموح به

  1. حلِّل سبب إرسال العميل المحدّد لحجم عنوان URI للطلب بما يتجاوز الحد المسموح به كما هو محدّد في الحدود.
  2. وإذا لم يكن مرغوبًا فيه، عدِّل تطبيق العميل لكي يرسل حجم عنوان URI للطلب أقل من الحد المسموح به.

    في المثال الذي تمت مناقشته أعلاه، يمكنك حلّ المشكلة من خلال تمرير مَعلمة طلب البحث الطويل كجزء من نص/حمولة الطلب بدلاً من تمريرها كجزء من عنوان URL للطلب كما هو موضّح أدناه:

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. إذا كان هذا الإجراء مرغوبًا وكنت تريد إرسال معرّف موارد منتظم (URI) يتجاوز الحدّ المسموح به، انتقِل إلى الخيارات التالية.

CwC

الخيار #2 : استخدام سمة CwC لزيادة الحدّ الأقصى لسطر الطلب

توفّر Apigee سمة CwC التي تسمح لها بزيادة الحد المسموح به لحجم سطر الطلب. لمعرفة التفاصيل، يُرجى الاطّلاع على ضبط حدّ سطر الطلب في معالج الرسائل

الحدود المسموح بها

تتوقّع Apigee ألا يرسل تطبيق العميل وخادم الخلفية طلبات/خطوط الاستجابة التي تكون أحجامها أكبر من الحد المسموح به كما هو موثق في الحد الأقصى لسطر الطلب/الاستجابة في حدود Apigee Edge.

  1. إذا كنت من مستخدمي Public Cloud، يكون الحدّ الأقصى لحجم الطلب وسطر الاستجابة كما هو موثَّق في حجم الطلب/الاستجابة-سطر في حدود 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 لخدمات السحابة الإلكترونية الخاصة هو 7 كيلوبايت.

إذا كنت لا تزال بحاجة إلى أي مساعدة من فريق دعم Apigee، يُرجى الانتقال إلى ضرورة جمع معلومات التشخيص.

ضرورة جمع معلومات التشخيص

اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge:

إذا كنت من مستخدمي Cloud Cloud، يُرجى تقديم المعلومات التالية:

  • اسم المؤسسة
  • اسم البيئة
  • اسم الخادم الوكيل لواجهة برمجة التطبيقات
  • أكمِل أمر curl المستخدَم لإعادة إظهار الخطأ 414.
  • ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات

إذا كنت مستخدم Cloud خاصًا، يُرجى تقديم المعلومات التالية:

  • رسالة الخطأ الكاملة التي تم رصدها للطلبات التي تعذّر تنفيذها
  • اسم المؤسسة
  • اسم البيئة
  • حزمة الخادم الوكيل لواجهة برمجة التطبيقات
  • ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات التي تعذّر تنفيذها
  • أكمِل أمر 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