أنت الآن بصدد الاطّلاع على مستندات 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 |
الخطوات الشائعة لتشخيص المشكلة
استخدِم إحدى الأدوات أو التقنيات التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام "مراقبة واجهة برمجة التطبيقات"، اتّبِع الخطوات التالية:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم لديه دور مناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقِل إلى صفحة التحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
- اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
- ارسم رمز الخطأ مقابل الوقت.
- اختَر خلية تحتوي على رمز الخطأ
protocol.http.TooBigHeadersو رمز الحالة431كما هو موضّح أدناه:
ستظهر لك معلومات عن رمز الخطأ
protocol.http.TooBigHeadersكما هو موضّح أدناه:
انقر على عرض السجلات ووسِّع صف الطلب الذي تعذّر تنفيذه:
من نافذة السجلات ، لاحظ التفاصيل التالية:
- رمز الحالة:
431 - مصدر الخطأ:
apigee - رمز الخطأ:
protocol.http.TooBigHeaders. - طول الطلب(بالبايت):
32150 (> 25 KB)
- رمز الحالة:
- إذا كان مصدر الخطأ يحتوي على القيمة
apigeeأوMP، وكان رمز الخطأ يحتوي على القيمةprotocol.http.TooBigHeadersوكان طول الطلب أكبر من 25 كيلوبايت، يشير ذلك إلى أنّ الحجم الإجمالي لجميع عناوين الطلبات التي يرسلها تطبيق العميل كجزء من طلب HTTP أكبر من الحدّ المسموح به في Apigee.
أداة التتبُّع
NGINX
لتشخيص الخطأ باستخدام سجلّات الوصول إلى NGINX، اتّبِع الخطوات التالية:
- إذا كنت مستخدمًا في Private Cloud، يمكنك استخدام سجلّات الوصول إلى NGINX لتحديد المعلومات الرئيسية عن أخطاء HTTP
431 تحقَّق من سجلّات الوصول إلى NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logملاحظة: يتم استبدال ORG وENV وPORT# بالقيم الفعلية.
- ابحث لمعرفة ما إذا كانت هناك أي أخطاء
431خلال مدة معيّنة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تتعذّر بسبب431. إذا عثرت على أي أخطاء
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.TooBigHeadersX-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.
السبب: حجم عناوين الطلبات أكبر من الحدّ المسموح به
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ وحجم طول الطلب للخطأ الذي تم رصده باستخدام "مراقبة واجهة برمجة التطبيقات" أو سجلّات الوصول إلى NGINX كما هو موضّح في الخطوات الشائعة لتشخيص المشكلة.
- إذا كان مصدر الخطأ يحتوي على القيمة
apigeeأوMP، وكان رمز الخطأ يحتوي على القيمةprotocol.http.TooBigHeaders، وكان طول الطلب أكبر من 25 كيلوبايت، يشير ذلك إلى أنّ حجم الطلب الذي يرسله تطبيق العميل إلى Apigee أكبر من الحدّ المسموح به في Apigee Edge. - يمكنك التأكّد من أنّ حجم عناوين الطلبات قد تجاوز الحدّ المسموح به البالغ 25 كيلوبايت باستخدام إحدى
الطرق التالية:
رسالة الخطأ
للتأكّد من ذلك باستخدام رسالة الخطأ:
إذا كان بإمكانك الوصول إلى رسالة الخطأ الكاملة التي تم تلقّيها من Apigee Edge، يُرجى الرجوع إلى
faultstring. يشيرfaultstringإلى أنّ الحجم الإجمالي لعناوين الطلبات قد تجاوز الحدّ المسموح به البالغ 25 كيلوبايت.رسالة خطأ نموذجية:
"faultstring":"request headers size exceeding 25,600"
الطلب الفعلي
للتأكّد من ذلك باستخدام الطلب الفعلي:
إذا كان بإمكانك الوصول إلى الطلب الفعلي الذي أرسله تطبيق العميل، اتّبِع الخطوات التالية:
- تحقَّق من حجم العناوين التي تم تمريرها في الطلب.
إذا تبيّن لك أنّ الحجم الإجمالي للعناوين أكبر من الـ حدّ المسموح به في 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.
تحقَّق من سجلّات "معالج الرسائل":
/opt/apigee/var/log/edge-message-processor/logs/system.log- ابحث لمعرفة ما إذا كانت هناك أي أخطاء
431خلال مدة معيّنة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تتعذّر بسبب431. يمكنك استخدام عبارات البحث التالية.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- ستعثر على أسطر من
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 [مقترَح]: إصلاح تطبيق العميل لكي لا يرسل عناوين طلبات بحجم إجمالي أكبر من الحدّ المسموح به
- حلِّل سبب إرسال العميل المحدّد عنوان طلب بحجم كبير يجعل الحجم الإجمالي للعنوان أكبر من الحدّ المسموح به كما هو محدّد في الحدود.
إذا لم يكن ذلك مرغوبًا فيه، عدِّل تطبيق العميل لكي يرسل عناوين طلبات بحجم أقل من الحدّ المسموح به.
في المثال الذي تمت مناقشته أعلاه، يمكنك حلّ المشكلة من خلال تمرير مَعلمة قيم العنوان الطويلة كجزء من نص الطلب أو الحِمل:
curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'- إذا كان ذلك مرغوبًا فيه وأردت إرسال عنوان أكبر من الحدّ المسموح به، انتقِل إلى الـ خيار التالي.
CwC
الخيار 2 : استخدام السمة CwC لزيادة الحدّ الأقصى لسطر الطلب
توفر Apigee سمة CwC تتيح زيادة الحد الأقصى لحجم سطر الطلب. لمزيد من التفاصيل، يُرجى الاطّلاع على ضبط الحدّ الأقصى لسطر الطلب في "معالج الرسائل"
الحدود
تتوقع Apigee ألا يرسل تطبيق العميل وخادم الخلفية عناوين طلبات أو استجابات أكبر من الحدّ المسموح به كما هو موضّح في الحدّ الأقصى لحجم عنوان الطلب أو الاستجابة في حدود Apigee Edge.
- إذا كنت مستخدمًا في السحابة الإلكترونية العامة، يكون الحدّ الأقصى لحجم عناوين الطلبات والاستجابات كما هو موضّح في حجم عنوان الطلب أو الاستجابة في حدود Apigee Edge.
- إذا كنت مستخدمًا في Private Cloud، قد تكون عدّلت الحدّ الأقصى التلقائي لحجم عناوين الطلبات والاستجابات (على الرغم من أنّ هذه ليست ممارسة مقترَحة). يمكنك تحديد الحدّ الأقصى لحجم عنوان الطلب باتّباع التعليمات الواردة في كيفية التحقّق من الحدّ الحالي.
كيفية التحقّق من الحدّ الحالي؟
يوضّح هذا القسم كيفية التأكّد من تعديل السمة HTTPRequest.headers.limit بقيمة جديدة في "معالجات الرسائل".
- على جهاز "معالج الرسائل"، ابحث عن السمة
HTTPRequest.headers.limitفي الدليل/opt/apigee/edge-message-processor/confوتحقَّق من القيمة التي تم ضبطها كما هو موضّح أدناه:grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
- في ما يلي نتيجة نموذجية من الأمر أعلاه:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
في نموذج الإخراج أعلاه، لاحظ أنّه تم ضبط السمة
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