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

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

المشكلة

يتلقّى تطبيق العميل رمز حالة 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.

قبل أن نلقي نظرة على الأسباب المحتملة لهذا الخطأ، لنفهم أولاً معنى سطر الطلب وكيفية التحقّق من حجمه.

فهم Request-Line

يتألف طلب HTTP نموذجي من ثلاثة أجزاء:

  1. Request-Line
  2. ( مجموعة من عناوين HTTP )
  3. [ Body ]

يتألف سطر الطلب من ثلاثة أجزاء كما هو موضّح أدناه.

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

عندما يقدّم تطبيق العميل طلب HTTP إلى خادم، يتضمّن السطر الأول الذي يتم إرساله إلى الخادم سطر الطلب الموضّح أعلاه. يلي ذلك العناوين ونص الطلب/الحِمل.

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

فهم حجم Request-Line

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

    يبلغ حجم Request-Line ‏~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 Public Cloud وEdge Private Cloud

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

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

API Monitoring

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

  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. إذا كنت مستخدمًا في 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. حدِّد رمز الخطأ ومصدر الخطأ وحجم طول الطلب للخطأ الذي تم رصده باستخدام &quot;مراقبة واجهة برمجة التطبيقات&quot; أو &quot;أداة التتبُّع&quot; أو سجلات الوصول إلى NGINX كما هو موضّح في خطوات التشخيص الشائعة.
  2. إذا كانت قيمة مصدر الخطأ هي apigee أو MP، يشير ذلك إلى أنّ حجم الطلب الذي أرسله تطبيق العميل إلى Apigee أكبر من الحد المسموح به في Apigee Edge.
  3. يمكنك التأكّد من أنّ حجم سطر الطلب قد تجاوز الحدّ المسموح به وهو 7 كيلوبايت باستخدام إحدى الطريقتَين التاليتَين:

    رسالة الخطأ

    لإثبات صحة المعلومات باستخدام رسالة الخطأ، اتّبِع الخطوات التالية:

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

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

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

    الطلب الفعلي

    لإثبات صحة الرمز باستخدام الطلب الفعلي، اتّبِع الخطوات التالية:

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

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

      نموذج طلب:

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

      في الحالة أعلاه، تكون قيمة مَعلمة طلب البحث qparam أكبر من 7 كيلوبايت، أي أنّها تحتوي على أكثر من 7 آلاف حرف ASCII.

      إذا كنت تستخدم برنامجًا آخر، يمكنك مراجعة سجلّات البرنامج ومحاولة معرفة حجم سطر الطلب الذي يتم إرساله إلى Apigee Edge.

    سجلّات "معالج الرسائل"

    لإثبات صحة البيانات باستخدام سجلّات "معالج الرسائل"، اتّبِع الخطوات التالية:

    إذا كنت من مستخدمي Private Cloud، يمكنك استخدام سجلّات &quot;معالج الرسائل&quot; للتحقّق مما إذا كان حجم Request-Line قد تجاوز الحدّ المسموح به في 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 [يُنصح به]: إصلاح تطبيق العميل لكي لا يرسل حجم معرّف الموارد المنتظم للطلب أكبر من الحدّ المسموح به

  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. إذا كنت مستخدمًا للسحابة الإلكترونية العامة، يكون الحدّ الأقصى لحجم سطر الطلب والاستجابة هو ما هو موضّح في حجم سطر الطلب/الاستجابة ضمن حدود Apigee Edge.
  2. إذا كنت مستخدمًا في Private Cloud، فمن المحتمل أنّك عدّلت الحد الأقصى التلقائي لحجم سطر الطلب والاستجابة (على الرغم من أنّها ليست ممارسة يُنصح بها). يمكنك تحديد الحد الأقصى لحجم Request-Line باتّباع التعليمات الواردة في كيفية التحقّق من الحدّ الحالي.

كيف يمكن التحقّق من الحدّ الحالي؟

يوضّح هذا القسم كيفية التأكّد من تعديل السمة HTTPRequest.line.limit بقيمة جديدة في "معالجات الرسائل".

  1. على جهاز &quot;معالج الرسائل&quot;، ابحث عن السمة 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.

    يشير ذلك إلى أنّ الحدّ الأقصى لحجم Request-Line الذي تم ضبطه في Apigee Private Cloud هو 7 كيلوبايت.

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

يجب جمع معلومات التشخيص

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

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

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

إذا كنت مستخدمًا في Private 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