431 حقول عناوين الطلب كبيرة جدًا - قيمة متوفّرة جدًا

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

المشكلة

يحصل تطبيق العميل على رمز حالة HTTP لـ 431 Request Header Fields Too Large مع رمز الخطأ protocol.http.TooBigHeaders كاستجابة لطلبات البيانات من واجهة برمجة التطبيقات.

رسالة الخطأ

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

HTTP/1.1 431 Request Header Fields Too Large

بالإضافة إلى ذلك، قد تلاحظ رسالة الخطأ التالية:

{
   "fault":{
      "faultstring":"request headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

الأسباب المحتملة

يحدث هذا الخطأ إذا كان الحجم الإجمالي لجميع عناوين الطلبات التي أرسلها تطبيق العميل إلى Apigee Edge كجزء من طلب HTTP أكبر من الحد المسموح به في Apigee Edge وفقًا لمعيار RFC 6585، القسم 5: 431 حقول عنوان الطلب كبيرة جدًا.

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

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

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

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

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

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

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

  3. انتقل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
  4. اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
  5. ارسم رمز الخطأ مقابل الوقت.
  6. اختَر خلية تحتوي على رمز الخطأ protocol.http.TooBigHeaders ورمز الحالة 431 كما هو موضّح أدناه:

    ( عرض صورة أكبر حجمًا)

  7. ستظهر لك المعلومات المتعلّقة برمز الخطأ protocol.http.TooBigHeaders كما هو موضّح أدناه:

    ( عرض صورة أكبر حجمًا)

  8. انقر على عرض السجلات ووسِّع الصف الخاص بالطلب الذي تعذّر إكماله:

    ( عرض صورة أكبر حجمًا)

  9. من نافذة السجلّات، دوِّن التفاصيل التالية:

    • رمز الحالة: 431
    • مصدر الخطأ: apigee
    • رمز الخطأ: protocol.http.TooBigHeaders.
    • طول الطلب(بالبايت): 32150 (> 25 KB)
  10. إذا كانت قيمة مصدر الخطأ apigee أو MP، يكون قيمة رمز الخطأ protocol.http.TooBigHeaders وحجم طول الطلب أكبر من 25 كيلوبايت، ويشير ذلك إلى أنّ الحجم الإجمالي لجميع عناوين الطلبات التي أرسلها تطبيق العميل كجزء من طلب HTTP يكون أكبر من الحد المسموح به في Apigee.

أداة التتبُّع

NGINX

لتشخيص الخطأ باستخدام سجلات الوصول إلى NGINX:

  1. إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك استخدام سجلات وصول NGINX لتحديد المعلومات الأساسية حول أخطاء 431 في HTTP.
  2. تحقَّق من سجلات وصول NGINX:

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

    المكان: يتم استبدال ORG وENV وPORT# بالقيم الفعلية.

  3. ابحث عن أي أخطاء 431 تحدث خلال مدة معيّنة (إذا كانت المشكلة قد حدثت في السابق) أو إذا كانت هناك أي طلبات لا تزال غير متوافقة مع 431.
  4. إذا عثرت على أي أخطاء 431 تتضمّن رمز 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.TooBigHeaders
    X-Apigee-fault-source MP

    ملاحظة طول الطلب: 40159 (أكبر من 25 كيلوبايت، الحدّ الأقصى المسموح به لرؤوس الطلبات في Apigee Edge)

    في نموذج إدخال السجلّ أعلاه، يحتوي X-Apigee-fault-source على القيمة apigee أو MP، وقيمة X-Apigee-fault-source هي protocol.http.TooBigHeaders، في حين يبلغ X-Apigee-fault-source 40 كيلوبايت، وهو عدد أكبر من الحدّ المسموح به في Apigee، وهو 25 كيلوبايت. ويشير ذلك بوضوح إلى أنّ الحجم الإجمالي لجميع عناوين الطلبات التي يرسلها تطبيق العميل كجزء من طلب HTTP قد تجاوز الحدّ المسموح به وهو 25 كيلوبايت في Apigee Edge.

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

التشخيص

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

    رسالة الخطأ

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

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

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

    "faultstring":"request headers size exceeding 25,600"
    

    الطلب الفعلي

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

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

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

      نموذج طلب:

      curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>"
      

      في الحالة المذكورة أعلاه، يتجاوز الحجم الإجمالي للعناوين header0 وheader1 وheader2 وheader3 25 كيلوبايت، أي أنّها تحتوي على أكثر من 25 حرف ASCII (بايت).

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

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

    للتحقق من صحة استخدام سجلات معالج الرسائل:

    إذا كنت من مستخدمي Private Cloud، يمكنك استخدام سجلّات "معالج الرسائل" للتحقّق مما إذا كان حجم "عناوين الطلب" قد تجاوز الحد المسموح به في Apigee Edge.

    1. تحقَّق من سجلات معالج الرسائل:

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

    2. ابحث عن أي أخطاء 431 تحدث خلال مدة معيّنة (إذا كانت المشكلة قد حدثت في السابق) أو ما إذا كانت هناك أي طلبات لا تزال يتعذّر معالجتها من خلال 431. يمكنك استخدام سلاسل البحث التالية.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. ستجد سطورًا من system.log مشابهة لما يلي:
      2021-07-27 08:30:28,419  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractRequestListener.onException() :
      Request:GET, uri:/test/, message Id:null,
      exception:com.apigee.errors.http.user.RequestHeadersTooLarge{
      code = protocol.http.TooBigHeaders, message = request headers size
      exceeding 25,600, associated contexts = []}, context:Context@9c5903
      input=ClientInputChannel(SSLClientChannel[Accepted:
      Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130
      useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms  lastIO=0ms
      isOpen=true)
      

      يشير النص message = request headers size exceeding 25,600 في رسالة الخطأ أعلاه إلى أنّ إجمالي حجم عناوين الطلبات يزيد عن 25 كيلوبايت. لذلك، تعرض Apigee Edge الاستثناء com.apigee.errors.http.user.RequestHeadersTooLarge وتعرض رمز الحالة 431 برمز الخطأ protocol.http.TooBigHeaders إلى تطبيقات العميل.

درجة الدقّة

إصلاح الحجم

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

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

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

    curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
    
  3. إذا كان هذا الإجراء مرغوبًا وكنت تريد إرسال عنوان يتجاوز الحدّ المسموح به، انتقِل إلى الخيار التالي.

CwC

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

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

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

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

  1. إذا كنت مستخدمًا في Cloud Cloud، يكون الحدّ الأقصى لحجم عناوين الطلب والاستجابة كما هو موثّق بخصوص حجم عنوان الطلب/الاستجابة في حدود Apigee Edge.
  2. إذا كنت مستخدمًا خاصًا على السحابة الإلكترونية ، قد يكون تم تعديل الحد الأقصى التلقائي لحجم عناوين الطلبات والاستجابة (على الرغم من أنّ ذلك لا ننصح به). يمكنك تحديد الحدّ الأقصى لحجم عنوان الطلب من خلال اتّباع التعليمات الواردة في كيفية التحقّق من الحدّ الحالي.

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

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

  1. في جهاز معالجة الرسائل، ابحث عن السمة HTTPRequest.headers.limit في الدليل /opt/apigee/edge-message-processor/conf وتحقَّق لمعرفة القيمة التي تم ضبطها كما هو موضّح أدناه:
    grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. في ما يلي نموذج النتيجة من الأمر أعلاه:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
    
  3. في مثال الإخراج أعلاه، لاحظ أنّه تم ضبط السمة HTTPRequest.headers.limit على القيمة 25k في http.properties.

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

المواصفات

يتوقع Apigee Edge أن لا يرسل تطبيق العميل عناوين ذات حجم كبير كجزء من الطلب. إذا كان الطلب يحتوي على عناوين يزيد حجمها الإجمالي عن الحدّ الأقصى المحدّد، تطرح Apigee 431 Request Header Fields Too Large وفقًا لمواصفات RFC التالية:

المواصفات
RFC 6585، القسم 5: 431 حقول عنوان الطلب كبيرة جدًا

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

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

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

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

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

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

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