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

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

المشكلة

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

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

السبب الوصف تعليمات تحديد المشاكل وحلّها التي تنطبق على
حجم عناوين الطلبات أكبر من الحدّ المسموح به الحجم الإجمالي لجميع العناوين التي يرسلها تطبيق العميل كجزء من طلب 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. إذا كنت مستخدمًا في Private Cloud، يمكنك استخدام سجلّات الوصول إلى NGINX لتحديد المعلومات الرئيسية عن أخطاء HTTP 431
  2. تحقَّق من سجلّات الوصول إلى NGINX:

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

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

  3. ابحث لمعرفة ما إذا كانت هناك أي أخطاء 431 خلال مدة معيّنة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تتعذّر بسبب 431.
  4. إذا عثرت على أي أخطاء 431 مع X-Apigee-fault-code الذي يطابق قيمة protocol.http.TooBigHeaders، حدِّد قيمة X-Apigee-fault-source.

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

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

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

    في إدخال في السجلّ النموذجي أعلاه، يحتوي X-Apigee-fault-source على القيمة apigee أو MP، ويحتوي X-Apigee-fault-code على القيمة protocol.http.TooBigHeaders، وطول الطلب هو 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. إذا كنت مستخدمًا في السحابة الإلكترونية العامة، يكون الحدّ الأقصى لحجم عناوين الطلبات والاستجابات كما هو موضّح في حجم عنوان الطلب أو الاستجابة في حدود Apigee Edge.
  2. إذا كنت مستخدمًا في Private Cloud، قد تكون عدّلت الحدّ الأقصى التلقائي لحجم عناوين الطلبات والاستجابات (على الرغم من أنّ هذه ليست ممارسة مقترَحة). يمكنك تحديد الحدّ الأقصى لحجم عنوان الطلب باتّباع التعليمات الواردة في كيفية التحقّق من الحدّ الحالي.

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

يوضّح هذا القسم كيفية التأكّد من تعديل السمة 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 لـ Private Cloud هو 25 كيلوبايت.

المواصفات

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

المواصفات
RFC 6585، القسم 5: 431 Request Header Fields Too Large

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

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

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

إذا كنت مستخدمًا في السحابة الإلكترونية العامة، قدِّم المعلومات التالية:

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

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