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 Public و Private Cloud

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

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

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

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

  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 لإجراء ما يلي: لتحديد المعلومات الأساسية حول أخطاء 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 مطابقة قيمة protocol.http.TooBigHeaders، ثم تحديد قيمة X-Apigee-fault-source.

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

    عناوين الردود القيمة
    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. حدِّد رمز الخطأ ومصدر الخطأ وحجم طول الطلب تم رصد خطأ باستخدام سجلات API Monitoring أو NGINX Access كما هو موضح في خطوات التشخيص الشائعة:
  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 for Private يبلغ حجم السحابة الإلكترونية 25 كيلوبايت.

المواصفات

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

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

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

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

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

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

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

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

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