أنت تعرض مستندات 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
عاديًا، وهو الطلب.
وجزء الرد (بالإضافة إلى سطر الطلب).
فهم حجم سطر الطلب
- في النموذج الذي تمت مناقشته أعلاه، يتضمن سطر البداية (السطر الأول) في الطلب أيضًا
باسم سطر الطلب، كما يلي:
GET /test/ HTTP/1.1
يبلغ حجم سطر الطلب
~19 bytes
نظرًا لأنه يحتوي على19 ASCII characters
نظرًا لأن ذلك يقع في نطاق الحد المسموح به في Apigee Edge، تتم معالجة الطلب بدون أي أخطاء وستحصل على رد ناجح. - وبالمثل، إذا نظرت إلى
faultstring
في رسالة الخطأ المعروضة أعلاه، وتحتوي على"request line size exceeding 7,168"
. وهذا يشير إلى أن سطر الطلب في طلب HTTP الذي قدمه العميل تجاوز 7168 بايت.
في ما يلي الأسباب المحتملة لحدوث هذا الخطأ:
السبب | الوصف | إرشادات استكشاف الأخطاء وإصلاحها التي تنطبق على |
---|---|---|
حجم حمولة الطلب أكبر من الحد المسموح به | حجم URI للطلب الذي تم إرساله بواسطة تطبيق العميل كجزء من HTTP إرسال طلب إلى Apigee Edge أكبر من الحد المسموح به في Apigee Edge. | مستخدمو Edge Public و Private Cloud |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم 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 لإجراء ما يلي:
لتحديد المعلومات الأساسية حول أخطاء HTTP
414
. تحقق من سجلات وصول NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
المكان: يتم استبدال ORG وENV وPORT# بقيم فعلية.
- البحث لمعرفة ما إذا كانت هناك أي أخطاء
414
خلال مدة محدّدة (إذا حدثت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تخفق مع414
إذا عثرت على أي أخطاء
414
في رمز خطأ X-Apigee مطابقة قيمةprotocol.http.TooBigLine
، ثم تحديد قيمة X-Apigee-fault-source.يتضمن إدخال النموذج أعلاه من سجل وصول 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 Access كما هو موضح في خطوات التشخيص الشائعة:
- إذا كانت قيمة المصدر الخطأ
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
- إذا كنت مستخدمًا سحابيًا عامًا، يكون الحد الأقصى لـ "طلب" يتم توثيق حجم سطر الاستجابة لحجم سطر الطلب/الاستجابة في حدود 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 for Private يبلغ حجم السحابة الإلكترونية 7 كيلوبايت.
إذا كنت لا تزال بحاجة إلى مساعدة من Apigee، يُرجى الانتقال إلى يجب جمع معلومات التشخيص.
يجب جمع معلومات التشخيص
اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge:
إذا كنت من مستخدمي Cloud Public، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- إكمال الأمر
curl
المُستخدَم لإعادة إنتاج الخطأ414
- ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات
إذا كنت من مستخدمي Cloud Private، يُرجى تقديم المعلومات التالية:
- ظهور رسالة خطأ كاملة للطلبات التي تعذّر تنفيذها
- اسم المؤسسة
- اسم البيئة
- حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات التي تعذّر تنفيذها
- إكمال الأمر
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