أنت تعرض مستندات 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 |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم 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:
- إذا كنت مستخدمًا للسحابة الإلكترونية الخاص، يمكنك استخدام سجلات وصول NGINX لإجراء ما يلي:
لتحديد المعلومات الأساسية حول أخطاء HTTP
431
. تحقق من سجلات وصول NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
المكان: يتم استبدال ORG وENV وPORT# بقيم فعلية.
- البحث لمعرفة ما إذا كانت هناك أي أخطاء
431
خلال مدة محدّدة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تخفق مع431
إذا عثرت على أي أخطاء
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.
السبب: حجم عناوين الطلب أكبر من الحد المسموح به
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ وحجم طول الطلب تم رصد خطأ باستخدام سجلات API Monitoring أو NGINX Access كما هو موضح في خطوات التشخيص الشائعة:
- إذا كانت قيمة المصدر الخطأ
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:
- إذا كنت مستخدمًا في Cloud Cloud، فعندئذ يكون الحد الأقصى يتم توثيق حجم عنوانَي الطلب والردّ بالنسبة إلى حجم عنوان الطلب/الاستجابة في حدود Apigee Edge:
- إذا كنت مستخدمًا خاصًا على السحابة الإلكترونية من المحتمل أنّك عدّلت الحد الأقصى التلقائي حد حجم عناوين الطلبات والاستجابة (على الرغم من أنه لا يوصى به) يمكنك تحديد الحد الأقصى لحجم عنوان الطلب باتّباع التعليمات الواردة في كيفية التحقّق من الحدّ الأقصى الحالي
كيف يمكن التحقّق من الحدّ الأقصى الحالي؟
يوضِّح هذا القسم كيفية إثبات أنّ الموقع الإلكتروني 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 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