يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات
Apigee X. المعلومات
المشكلة
يحصل تطبيق العميل على رمز حالة HTTP 414 Request-URI Too Long
مع رمز الخطأ protocol.http.TooBigLine
كاستجابة لطلبات واجهة برمجة التطبيقات.
رسالة الخطأ
يتلقى تطبيق العميل رمز الاستجابة التالي:
HTTP/1.1 414 Request-URI Too Long
بالإضافة إلى ذلك، قد تلاحظ رسالة الخطأ التالية:
{ "fault":{ "faultstring":"request line size exceeding 7,168", "detail":{ "errorcode":"protocol.http.TooBigLine" } } }
تجدر الإشارة إلى أنّ faultstring
في رسالة الخطأ أعلاه يحتوي على الحدّ الأقصى المسموح به
لسطر الطلب في Apigee Edge، وهو 7168 bytes
(7 كيلوبايت).
الأسباب المحتملة
يحدث هذا الخطأ إذا كان حجم سطر الطلب الذي أرسله تطبيق العميل إلى Apigee Edge كجزء من طلب HTTP أكبر من الحد المسموح به في Apigee Edge.
قبل أن نتعرّف على الأسباب المحتمَلة لهذا الخطأ، لنتعرّف على معنى سطر الطلب وكيفية التحقّق من حجمه.
فهم سطر الطلب
يتألف طلب HTTP النموذجي من ثلاثة أجزاء:
- سطر الطلب
- ( مجموعة من عناوين HTTP )
- [ النص الأساسي ]
يتكون سطر الطلب من ثلاثة أجزاء كما هو موضح أدناه.
Request-Line = <Method> <Request-URI> <HTTP-Version>
عندما يقدم تطبيق العميل طلب HTTP إلى خادم، يحتوي السطر الأول الذي ينتقل إلى الخادم على سطر الطلب المذكور أعلاه. يلي ذلك العناوين وطلب النص الأساسي/الحمولة.
تعرض لقطة الشاشة التالية نموذج طلب curl
وجزء الطلب (بالإضافة إلى سطر الطلب) وجزء الردّ.
فهم حجم سطر الطلب
- في النموذج الذي تمت مناقشته أعلاه، يكون سطر start (السطر الأول) في الطلب، والمشار إليه أيضًا
باسم Request-Line، كما يلي:
GET /test/ HTTP/1.1
حجم سطر الطلب هو
~19 bytes
لأنّه يحتوي على19 ASCII characters
. بما أنّ هذا الطلب يقع ضمن الحدّ المسموح به في Apigee Edge، تتمّ معالجة الطلب بدون أيّ أخطاء وستحصل على ردّ ناجح. - وبالمثل إذا نظرت إلى
faultstring
في رسالة الخطأ الموضحة أعلاه، ستحتوي على"request line size exceeding 7,168"
. يشير هذا إلى أنّ سطر الطلب في طلب HTTP الذي أجراه العميل تجاوز 7,168 بايت.
في ما يلي الأسباب المحتملة لهذا الخطأ:
السبب | الوصف | تعليمات تحديد المشاكل وحلّها السارية على |
---|---|---|
حجم حمولة الطلب أكبر من الحد المسموح به | إنّ حجم "Request-URI" الذي يرسله تطبيق العميل كجزء من طلب HTTP إلى Apigee Edge أكبر من الحد المسموح به في Apigee Edge. | مستخدمو Edge العام والخاص على السحابة الإلكترونية |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم لديه دور مناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقل إلى صفحة تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق.
- اختَر الإطار الزمني المحدّد الذي لاحظت فيه الأخطاء.
- ارسم رمز الخطأ مقابل الوقت.
- اختَر خلية تحتوي على رمز الخطأ
protocol.http.TooBigLine
ورمز الحالة414
كما هو موضّح أدناه: ستظهر لك المعلومات المتعلّقة برمز الخطأ
protocol.http.TooBigline
كما هو موضّح أدناه:انقر على عرض السجلات ووسِّع الصف الخاص بالطلب الذي تعذّر إكماله:
من نافذة السجلّات، دوِّن التفاصيل التالية:
- رمز الحالة:
414
- مصدر الخطأ:
apigee
- رمز الخطأ:
protocol.http.TooBigLine
. - طول الطلب(بالبايت):
7244 (> 7KB)
- رمز الحالة:
- إذا كانت قيمة مصدر الخطأ
apigee
أوMP
، يكون قيمة رمز الخطأ هوprotocol.http.TooBigLine
وحجم طول الطلب أكبر من 7 كيلوبايت، ما يشير إلى أنّ طلب HTTP المقدَّم من العميل يشتمل على عنوان URI للطلب أكبر من الحد المسموح به في Apigee.
أداة التتبُّع
NGINX
لتشخيص الخطأ باستخدام سجلات الوصول إلى NGINX:
- إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك استخدام سجلات وصول NGINX لتحديد المعلومات الأساسية حول أخطاء
414
في HTTP. تحقَّق من سجلات وصول NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
المكان: يتم استبدال ORG وENV وPORT# بالقيم الفعلية.
- ابحث عن أي أخطاء
414
تحدث خلال مدة معيّنة (إذا كانت المشكلة قد حدثت في السابق) أو إذا كانت هناك أي طلبات لا تزال غير متوافقة مع414
. إذا عثرت على أي أخطاء
414
تتضمّن رمز 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.TooBigLine
X-Apigee-fault-source policy
يُرجى ملاحظة مدة الطلب:
7244
(7.244 كيلوبايت > الحد المسموح به)
السبب: حجم حمولة الطلب أكبر من الحد المسموح به
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ وحجم طول الطلب للخطأ الذي تم رصده باستخدام مراقبة واجهة برمجة التطبيقات أو أداة التتبُّع أو سجلات وصول NGINX كما هو موضّح في خطوات التشخيص الشائعة.
- إذا كانت قيمة مصدر الخطأ
apigee
أوMP
، يعني ذلك أنّ حجم الطلب الذي أرسله تطبيق العميل إلى Apigee أكبر من الحد المسموح به في Apigee Edge. - يمكنك التحقّق من أنّ حجم سطر الطلب تجاوز الحدّ الأقصى المسموح به البالغ 7 كيلوبايت باستخدام إحدى الطريقتَين التاليتَين:
رسالة الخطأ
للتأكُّد من استخدام رسالة الخطأ، اتّبِع الخطوات التالية:
إذا كان بإمكانك الوصول إلى رسالة الخطأ الكاملة التي تم تلقّيها من Apigee Edge، يُرجى الرجوع إلى
faultstring
. تشير السمةfaultstring
إلى أنّ حجم سطر الطلب تجاوز الحدّ الأقصى المسموح به وهو 7 كيلوبايت.نموذج لرسالة خطأ:
"faultstring":"request line size exceeding 7,168"
الطلب الفعلي
للتحقّق من استخدام الطلب الفعلي:
إذا كان بإمكانك الوصول إلى الطلب الفعلي الذي تم إجراؤه من خلال تطبيق العميل، اتّبِع الخطوات التالية:
- تحقق من حجم معرف الموارد المنتظم (URI) الذي تم تمريره في الطلب.
إذا وجدت أنّ حجم معرّف الموارد المنتظم (URI) يتجاوز الحد المسموح به في Apigee Edge، هذا هو سبب المشكلة.
نموذج طلب:
curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
في الحالة المذكورة أعلاه، تكون قيمة معلَمة طلب البحث
qparam
أكبر من 7 كيلوبايت، أي أنّها تحتوي على أكثر من 7 أحرف ASCII.إذا كنت تستخدم برنامج عميل آخر، يمكنك مراجعة سجلات العميل ومحاولة معرفة حجم سطر الطلب الذي يتم إرساله إلى Apigee Edge.
سجلّات "معالج الرسائل"
للتحقق من صحة استخدام سجلات معالج الرسائل:
إذا كنت من مستخدمي Private Cloud، يمكنك استخدام سجلّات "معالج الرسائل" للتحقّق مما إذا كان حجم "سطر الطلب" قد تجاوز الحد المسموح به في Apigee Edge.
تحقَّق من سجلات معالج الرسائل:
/opt/apigee/var/log/edge-message-processor/logs/system.log
- ابحث عن أي أخطاء
414
خلال مدة معيّنة (إذا كانت المشكلة قد حدثت في الماضي) أو لمعرفة ما إذا كانت هناك أي طلبات لا تزال يتعذّر إجراؤها من خلال414
. يمكنك استخدام سلاسل البحث التالية.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- ستجد سطورًا من
system.log
مشابهة لما يلي:2021-07-12 08:53:31,461 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:null, uri:null, message Id:null, exception:com.apigee.errors.http.user.RequestURITooLong{ code = protocol.http.TooBigLine, message = request line size exceeding 7,168, associated contexts = []}, context:Context@366f4217 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.195.90:8443 Local:192.168.67.23:34256]@301912 useCount=1 bytesRead=0 bytesWritten=45849 age=2254670ms lastIO=0ms isOpen=true)
يشير النص
message = request line size exceeding 7,168
في رسالة الخطأ أعلاه إلى أن حجم عنوان URI للطلب أكبر من 7 كيلوبايت. لذلك، تعرض Apigee Edge الاستثناءcom.apigee.errors.http.user.RequestURITooLong
وتعرض رمز الحالة414
برمز الخطأprotocol.http.TooBigline
إلى تطبيقات العميل.
درجة الدقّة
إصلاح الحجم
الخيار 1 [إجراء يُنصح به]: إصلاح تطبيق العميل لكي لا يرسل حجم عنوان URI للطلب الذي يتجاوز الحد المسموح به
- حلِّل سبب إرسال العميل المحدّد لحجم عنوان URI للطلب بما يتجاوز الحد المسموح به كما هو محدّد في الحدود.
وإذا لم يكن مرغوبًا فيه، عدِّل تطبيق العميل لكي يرسل حجم عنوان URI للطلب أقل من الحد المسموح به.
في المثال الذي تمت مناقشته أعلاه، يمكنك حلّ المشكلة من خلال تمرير مَعلمة طلب البحث الطويل كجزء من نص/حمولة الطلب بدلاً من تمريرها كجزء من عنوان URL للطلب كما هو موضّح أدناه:
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
- إذا كان هذا الإجراء مرغوبًا وكنت تريد إرسال معرّف موارد منتظم (URI) يتجاوز الحدّ المسموح به، انتقِل إلى الخيارات التالية.
CwC
الخيار #2 : استخدام سمة CwC لزيادة الحدّ الأقصى لسطر الطلب
توفّر Apigee سمة CwC التي تسمح لها بزيادة الحد المسموح به لحجم سطر الطلب. لمعرفة التفاصيل، يُرجى الاطّلاع على ضبط حدّ سطر الطلب في معالج الرسائل
الحدود المسموح بها
تتوقّع Apigee ألا يرسل تطبيق العميل وخادم الخلفية طلبات/خطوط الاستجابة التي تكون أحجامها أكبر من الحد المسموح به كما هو موثق في الحد الأقصى لسطر الطلب/الاستجابة في حدود Apigee Edge.
- إذا كنت من مستخدمي Public Cloud، يكون الحدّ الأقصى لحجم الطلب وسطر الاستجابة كما هو موثَّق في حجم الطلب/الاستجابة-سطر في حدود Apigee Edge.
- إذا كنت من المستخدمين الخاصين على السحابة الإلكترونية ، قد يكون تم تعديل الحدّ الأقصى التلقائي لحجم الطلب وسطر الرد (على الرغم من أنّ ذلك لا يُنصَح به). يمكنك تحديد الحدّ الأقصى المسموح به لحجم الطلب من خلال اتّباع التعليمات الواردة في كيفية التحقّق من الحدّ الحالي.
كيف يمكن التحقّق من الحد الحالي؟
يوضّح هذا القسم كيفية التحقق من أنّه قد تم تعديل الخاصية HTTPRequest.line.limit
بقيمة جديدة في معالجات الرسائل.
- في جهاز معالجة الرسائل، ابحث عن السمة
HTTPRequest.line.limit
في الدليل/opt/apigee/edge-message-processor/conf
وتحقَّق لمعرفة القيمة التي تم ضبطها كما هو موضّح أدناه:grep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
- في ما يلي نموذج النتيجة من الأمر أعلاه:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
في مثال الإخراج أعلاه، لاحظ أنّه تم ضبط السمة
HTTPRequest.line.limit
على القيمة7k
فيhttp.properties
.ويشير ذلك إلى أنّ الحدّ الأقصى لحجم سطر الطلب الذي تم ضبطه في Apigee لخدمات السحابة الإلكترونية الخاصة هو 7 كيلوبايت.
إذا كنت لا تزال بحاجة إلى أي مساعدة من فريق دعم Apigee، يُرجى الانتقال إلى ضرورة جمع معلومات التشخيص.
ضرورة جمع معلومات التشخيص
اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge:
إذا كنت من مستخدمي Cloud Cloud، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- أكمِل أمر
curl
المستخدَم لإعادة إظهار الخطأ414
. - ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات
إذا كنت مستخدم Cloud خاصًا، يُرجى تقديم المعلومات التالية:
- رسالة الخطأ الكاملة التي تم رصدها للطلبات التي تعذّر تنفيذها
- اسم المؤسسة
- اسم البيئة
- حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- ملف التتبُّع الخاص بطلبات واجهة برمجة التطبيقات التي تعذّر تنفيذها
- أكمِل أمر
curl
المستخدَم لإعادة إظهار الخطأ414
. سجلات وصول 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