أنت تعرض مستندات Apigee Edge.
انتقل إلى
مستندات Apigee X. معلومات
المشكلة
يحصل تطبيق العميل على رمز حالة HTTP 413 Request Entity Too Large
.
برمز الخطأ protocol.http.TooBigBody
كاستجابة لطلبات البيانات من واجهة برمجة التطبيقات.
رسالة الخطأ
يحصل تطبيق العميل على رمز الاستجابة التالي:
HTTP/1.1 413 Request Entity Too Large
بالإضافة إلى ذلك، قد تلاحظ رسالة الخطأ التالية:
{ "fault":{ "faultstring":"Body buffer overflow", "detail":{ "errorcode":"protocol.http.TooBigBody" } } }
الأسباب المحتملة
يحدث هذا الخطأ في حال إرسال حجم الحمولة من تطبيق العميل إلى Apigee Edge كجزء من طلب HTTP أكبر من الحد المسموح به في Apigee Edge .
في ما يلي الأسباب المحتملة لهذا الخطأ :
السبب | الوصف | إرشادات استكشاف الأخطاء وإصلاحها التي تنطبق على |
---|---|---|
حجم حمولة الطلب أكبر من الحد المسموح به | حجم حمولة البيانات الذي يرسله تطبيق العميل كجزء من طلب HTTP إلى Apigee Edge هو تجاوز الحد المسموح به في Apigee Edge. | مستخدمو Edge Public و Private Cloud |
يتجاوز حجم حمولة الطلب الحد المسموح به بعد فك الضغط | حجم حمولة البيانات الذي يتم إرساله بتنسيق مضغوط بواسطة تطبيق العميل كجزء من HTTP إرسال طلب إلى Apigee Edge يتجاوز الحد المسموح به عند فك ضغطه باستخدام Apigee Edge. | مستخدمو Edge Public و Private Cloud |
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم باستخدام الدور المناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقل إلى تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق في الصفحة.
- اختَر الفترة الزمنية المحدّدة التي لاحظت فيها الأخطاء.
- يمكنك اختيار فلتر الخادم الوكيل لتضييق نطاق رمز الخطأ.
- ارسم رمز الخطأ مقابل الوقت.
اختَر خلية تحتوي على رمز الخطأ
protocol.http.TooBigBody
وكذلك رمز الحالة413
كما هو موضّح أدناه:يتم عرض معلومات عن رمز الخطأ
protocol.http.TooBigBody
على النحو التالي: كما هو موضح أدناه:- انقر على عرض السجلات ووسِّع صف الطلب الذي تعذّر تنفيذه. ثم من
السجلات، لاحظ التفاصيل كما هو موضح أدناه :
غير مضغوط
السيناريو 1: إرسال الحمولة في نموذج غير مضغوط
من نافذة السجلّات، دوِّن التفاصيل التالية:
- رمز الحالة:
413
- مصدر الخطأ:
proxy
- رمز الخطأ:
protocol.http.TooBigBody
. - طول الطلب(بالبايت):
15360440
(حوالي 15 ميغابايت)
إذا كانت قيمة المصدر الخطأ هي
proxy
، يصبح رمز الخطأ على القيمةprotocol.http.TooBigBody
وطول الطلب أكبر من 10 ميغابايت، فإنها تشير إلى أن طلب HTTP من العميل يحتوي على طلب حجم أكبر من الحد المسموح به في Apigee.مضغوط
السيناريو 2: إرسال الحمولة في شكل مضغوط
من نافذة السجلات، يُرجى ملاحظة التفاصيل التالية:
- رمز الحالة:
413
- مصدر الخطأ:
proxy
- رمز الخطأ:
protocol.http.TooBigBody
. - طول الطلب(بايت):
15264
(حوالي 15 كيلوبايت)
إذا كانت قيمة المصدر الخطأ هي
proxy
، يصبح رمز الخطأ على القيمةprotocol.http.TooBigBody
وطول الطلب هو أقل من 10 ميغابايت، فإنها تشير إلى أن طلب HTTP من العميل يحتوي على أن تطلب حجم حمولة أقل من الحد المسموح به في التنسيق المضغوط، ولكن حجم الحمولة أكبر من الحد المسموح به عند فك ضغطه باستخدام Apigee. - رمز الحالة:
التتبّع
لتشخيص الخطأ باستخدام أداة التتبُّع:
- فعِّل جلسة التتبع وإمّا
- انتظِر إلى أن يحدث الخطأ
413 Request Entity Too Large
أو - إذا كان بإمكانك إعادة إنتاج المشكلة، عليك طلب بيانات من واجهة برمجة التطبيقات وإعادة إنتاجها.
خطأ واحد (
413 Request Entity Too Large
)
- انتظِر إلى أن يحدث الخطأ
تأكَّد من تفعيل عرض كل معلومات التدفق.
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص عملية التتبُّع.
- انتقِل إلى المرحلة تم استلام الطلب من العميل.
غير مضغوط
السيناريو 1: إرسال الحمولة في نموذج غير مضغوط
يُرجى مراعاة المعلومات التالية:
- ترميز المحتوى: غير متوفّر
- طول المحتوى:
15360204
مضغوط
السيناريو 2: إرسال الحمولة في شكل مضغوط
يُرجى مراعاة المعلومات التالية:
- ترميز المحتوى:
gzip
- طول المحتوى:
14969
- نوع المحتوى:
application/x-gzip
- يمكنك التنقّل خلال مراحل عملية التتبُّع المختلفة وتحديد مكان حدوث الفشل.
ستجد الخطأ عادةً في مسار بعد عرض الطلب المستلَم من العميل كما هو موضّح أدناه:
- سجِّل قيمة الخطأ من عملية التتبُّع. يوضّح نموذج التتبّع أعلاه ما يلي:
- الخطأ:
Body buffer overflow
- error.class:
com.apigee.errors.http.user.RequestTooLarge
- الخطأ:
انتقِل إلى Response Sent to Client (تم إرسال الردّ إلى العميل) وراجِع قيم الخطأ من يُظهر نموذج التتبّع أدناه ما يلي:
- الخطأ:
413 Request Entity Too Large
- محتوى الخطأ:
{"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}
- الخطأ:
- انتقِل إلى مرحلة AX (البيانات المسجَّلة في "إحصاءات Google") في عملية التتبُّع وانقر عليها.
في قسم تفاصيل المرحلة، انتقِل للأسفل حتى تصل إلى قراءة المتغيّرات.
- حدِّد قيمة المتغير client.payd.content.length ، ما يشير إلى ما يلي:
- الحجم الفعلي لحمولة الطلب عند إرسالها بتنسيق غير مضغوط
- حجم حمولة الطلب عند فك الضغط بواسطة Apigee، عندما تكون الحمولة يتم إرسالها بتنسيق مضغوط. وستظل دائمًا كما هي مع قيمة الحد الأقصى المسموح به (10 ميغابايت) في هذا السيناريو.
غير مضغوط
السيناريو 1: الحمولة لطلب في نموذج غير مضغوط
متغيّر client.payd.content.length:
15360204
مضغوط
السيناريو 2: طلب الحمولة بتنسيق مضغوط
متغيّر client.payd.content.length:
10489856
- يوضّح الجدول التالي سبب عرض الخطأ
413
بواسطة Apigee ضمن السيناريوهين استنادًا إلى قيمة المتغير client.payd.content.length:السيناريو قيمة client.payd.content.length سبب التعذُّر طلب الحمولة بتنسيق غير مضغوط 15 ميغابايت تقريبًا الحجم > يبلغ الحد الأقصى المسموح به 10 ميغابايت. طلب الحمولة بتنسيق مضغوط 10 ميغابايت تقريبًا تم تجاوز الحد الأقصى للحجم عند فك الضغط
NGINX
لتشخيص الخطأ باستخدام سجلات وصول NGINX:
- إذا كنت مستخدمًا للسحابة الإلكترونية الخاص، يمكنك استخدام سجلات وصول NGINX لتحديد
المعلومات الأساسية حول أخطاء HTTP
413
. تحقق من سجلات وصول NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- ابحث لمعرفة ما إذا كانت هناك أي أخطاء
413
خلال مدة محدّدة (إذا حدثت مشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تخفق مع413
- إذا ظهرت أي أخطاء
413
في رمز الخطأ X-Apigee-fault-code قيمةprotocol.http.TooBigBody
، ثم حدِّد قيمة X-Apigee-fault-source.غير مضغوط
السيناريو 1 : طلب حجم حمولة البيانات بتنسيق غير مضغوط
يحتوي إدخال النموذج أعلاه من سجلّ وصول NGINX على القيم التالية لكلّ من X-Apigee-fault-code وX-Apigee-fault-code
عناوين الردود القيمة X-Apigee-fault-code protocol.http.TooBigBody
X-Apigee-fault-sourc policy
يُرجى ملاحظة أنّ طول الطلب:
15360440
(14.6 ميغابايت > الحدّ المسموح به).مضغوط
السيناريو 2 : طلب حجم حمولة البيانات بتنسيق مضغوط
يتضمن إدخال النموذج أعلاه من سجل وصول NGINX القيم التالية X-Apigee-fault-code وX-Apigee-fault-code
عناوين الردود القيمة X-Apigee-fault-code protocol.http.TooBigBody
X-Apigee-fault-source policy
يُرجى الاطّلاع على مدة الطلب:
15264
(الحد الأقصى المسموح به هو 14.9 ألف شخص).في هذا السيناريو، تعرض Apigee Edge
413
على الرغم من مدة الطلب أقل من الحد المسموح به نظرًا لأن الطلب قد تم إرسالها بتنسيق مضغوط ويتجاوز حجم الحمولة الحد عند فك الضغط بواسطة Apigee Edge.
السبب: حجم حمولة الطلب أكبر من الحد المسموح به
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ وحجم حمولة الطلب تم رصد خطأ باستخدام سجلات وصول "مراقبة واجهة برمجة التطبيقات" أو أداة التتبع أو NGINX كما هو موضح في خطوات التشخيص الشائعة مع السيناريو 1 (غير مضغوط).
- إذا كانت قيمة المصدر الخطأ
policy
أوproxy
، فعندئذ سيتم يشير إلى أنّ حجم حمولة الطلب الذي يرسله تطبيق العميل إلى Apigee أكبر من الحد المسموح به في Apigee Edge. - تحقَّق من حجم حمولة الطلب كما هو محدّد في الخطوة 1.
- إذا كان حجم حمولة البيانات أكبر من الحد المسموح به 10 ميغابايت، فهذا هو سبب الخطأ.
- إذا كان حجم الحمولة< يبلغ الحد المسموح به 10 ميغابايت، فمن الممكن أن يطلب يتم تمرير الحمولة بتنسيق مضغوط. انتقل إلى السبب: تجاوز حجم حمولة الطلب الحد المسموح به بعد فك الضغط
- يمكنك أيضًا التحقّق مما إذا كان حجم حمولة الطلب > يُسمح بـ 10 ميغابايت كحد أقصى بحلول
للتحقّق من الطلب الفعلي باتّباع الخطوات التالية:
- إذا لم يكن لديك إذن الوصول إلى الطلب الفعلي المقدَّم من تطبيق العميل، انتقِل إلى الحلّ:
- إذا كان لديك إذن بالوصول إلى الطلب الفعلي الذي أرسله تطبيق العميل، فنفِّذ
الخطوات التالية:
- تحقَّق من حجم الحمولة التي تم تمريرها في الطلب.
- إذا وجدت أن حجم الحمولة أكبر من الحد المسموح به في Apigee Edge، فيكون هذا هو سبب المشكلة.
نموذج طلب:
curl http://<hostalias>/testtoobigbody -k -X POST -F file=@test15mbfile -v
في الحالة المذكورة أعلاه، يبلغ حجم الملف
test15mbfile
حوالي 15 ميغابايت. إذا كنت تستخدم برنامجًا آخر، احصل على سجلات العميل لمعرفة حجم الحمولة الذي يتم إرساله.
الدقة
انتقِل إلى درجة الدقة.
السبب: تجاوز حجم حمولة الطلب الحد المسموح به بعد فك الضغط
في حال إرسال حمولة الطلب بتنسيق مضغوط وعنوان الطلب
تم ضبط Content-Encoding
على gzip,
تفكك Apigee ضغط الطلب.
حمولة البيانات. أثناء عملية فك الضغط، إذا وجد Apigee أن حجم الحمولة أكبر
أقل من 10 ميغابايت،
الحد المسموح به، ثم يوقف عملية فك الضغط الإضافية ويستجيب
مباشرةً مع 413 Request Entity Too Large
مع رمز الخطأ
protocol.http.TooBigBody
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ وحجم حمولة الطلب. للخطأ الذي تمت ملاحظته باستخدام سجلات API Monitoring أو Trace Tool أو NGINX Access كما هو موضح في خطوات التشخيص الشائعة مع السيناريو 2 (مضغوط).
- إذا كانت قيمة المصدر الخطأ
policy
أوproxy
، فعندئذ ويشير ذلك إلى أنّ حجم حمولة الطلب الذي يرسله تطبيق العميل إلى Apigee أكبر عن الحد المسموح به في Apigee Edge. - تحقَّق من حجم حمولة الطلب كما هو محدّد في الخطوة 1.
- إذا كان حجم حمولة البيانات أكبر من الحد المسموح به 10 ميغابايت، فهذا هو سبب الخطأ.
- إذا كان حجم الحمولة< يبلغ الحد المسموح به 10 ميغابايت، فمن الممكن أن يطلب يتم تمرير الحمولة بتنسيق مضغوط. في هذه الحالة، تحقق من الحجم غير المضغوط حمولة البيانات المضغوطة.
- يمكنك التحقق مما إذا كان الطلب من العميل قد تم إرساله بتنسيق مضغوط
الحجم غير المضغوط أكبر من الحد المسموح به باستخدام أحد العناصر التالية
الطرق:
التتبّع
للتحقّق من الصحة باستخدام أداة التتبُّع:
- إذا سجّلت تتبُّعًا للطلب الذي تعذّر إكماله، يمكنك الرجوع إلى الخطوات الموضّحة بالتفصيل في
Trace
- تحديد قيمة المتغيّر client.received.content.length
- تحقق مما إذا كان الطلب من العميل يتضمن Content-Encoding:
العنوان
gzip
- إذا كانت قيمة المتغيّر client.received.content.length أكبر من
10 ميغابايت،
الحد المسموح به، وعنوان الطلب Content-Encoding:
gzip
فهذا هو سبب هذا الخطأ.
طلب فعلي
للتحقّق من الصحة باستخدام الطلب الفعلي:
- إذا لم يكن لديك إذن الوصول إلى الطلب الفعلي المقدَّم من تطبيق العميل، انتقِل إلى الحلّ:
- إذا كان لديك إذن بالوصول إلى الطلب الفعلي الذي أرسله تطبيق العميل، فنفِّذ
الخطوات التالية:
- تحقَّق من حجم الحمولة الذي تم تمريره في الطلب إلى جانب
تم إرسال عنوان
Content-Encoding
في الطلب. تحقَّق لمعرفة ما إذا كان حجم الحمولة غير المضغوط أكبر من الحد المسموح به في Apigee Edge
نموذج طلب:
curl https://<hostalias>/testtoobigbody -k -X POST -F file=@test15mbfile.gz -H "Content-Encoding: gzip" -v
في الحالة المذكورة أعلاه، يكون الملف
test15mbfile.gz
أقل من الحد الأقصى للحجم، ولكن حجم الملف غير المضغوطtest15mbfile
هو حوالي 15 ميغابايت رأسContent-Encoding
هوgzip
.إذا كنت تستخدم برنامجًا آخر، احصل على سجلات العميل لمعرفة حجم الحمولة. التي يتم إرسالها وما إذا تم ضبط عنوان
Content-Encoding
علىgzip
.
- تحقَّق من حجم الحمولة الذي تم تمريره في الطلب إلى جانب
تم إرسال عنوان
سجلات معالج الرسائل
للتحقق من صحة استخدام سجلات معالج الرسائل:
- إذا كنت مستخدمًا خاصًا في السحابة الإلكترونية، يمكنك استخدام سجلات "معالج الرسائل" لتحديد
المعلومات الأساسية حول أخطاء HTTP
413
. تحقَّق من سجلات "معالج الرسائل":
/opt/apigee/var/log/edge-message-processor/logs/system.log
ابحث لمعرفة ما إذا كانت هناك أي أخطاء
413
خلال مدة محدّدة (إذا كانت حدثت مشكلة في الماضي) أو في حال استمرار تعذّر تنفيذ أي طلبات مع413
.يمكنك استخدام سلاسل البحث التالية:
grep -ri "chunkCount"
grep -ri "RequestTooLarge"
- ستظهر لك خطوط من "
system.log
" مشابهة لما يلي. (قد تختلف قيمةTotalRead
وchunkCount
في حالتك):2021-07-06 13:29:57,544 NIOThread@1 ERROR HTTP.SERVICE - TrackingInputChannel.checkMessageBodyTooLarge() : Message is too large. TotalRead 10489856 chunkCount 2570 2021-07-06 13:29:57,545 NIOThread@1 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: com.apigee.errors.http.user.RequestTooLarge : Body buffer overflow
- أثناء عملية فك الضغط، بمجرد أن يحدد معالج الرسائل إجمالي البيانات
وحدات البايت المقروءة هي > 10 ميغابايت، يتوقف ويطبع السطر التالي:
Message is too large. TotalRead 10489856 chunkCount 2570
ويشير ضمنًا إلى أنّ حجم حمولة الطلب أكبر من 10 ميغابايت، كما أنه عمليات طرح Apigee ظهور الخطأ
RequestTooLarge
عندما يبدأ الحجم في تجاوز الحد الأقصى المسموح به وهو 10 ميغابايت مع رمز خطأ بتنسيقprotocol.http.TooBigBody
- إذا سجّلت تتبُّعًا للطلب الذي تعذّر إكماله، يمكنك الرجوع إلى الخطوات الموضّحة بالتفصيل في
Trace
الدقة
إصلاح الحجم
الخيار #1 [مقترَح]: إصلاح تطبيق العميل لعدم إرسال حجم حمولة أكبر من الحد المسموح به
- تحليل السبب الذي يدفع العميل المحدّد لإرسال الطلب أو حجم الحمولة أكثر من المسموح به كما هو موضح في الحدود.
إذا لم يكن مرغوبًا فيه، عدِّل تطبيق العميل بحيث يرسل الطلب أو الحمولة الحجم أقل من الحد المسموح به.
في المثال الذي ناقشناه أعلاه، يمكنك حل المشكلة بتمرير ملف أصغر حجمًا، لنفترض أنّ حمولة البيانات
test5mbfile
(بحجم 5 ميغابايت) كما هو موضّح أدناه:curl https://<host>/testtoobigbody -k -X POST -F file=@test5mbfile -v
- إذا كان ذلك مرغوبًا وكنت تريد إرسال طلب/حمولة أكثر من الحد المسموح به، انتقِل إلى الخيارات التالية.
نمط عنوان URL الموقَّع
الخيار #2 [مقترَح]: استخدام نمط عناوين URL الموقَّعة ضمن Apigee JavaCallout
بالنسبة إلى الحمولات التي يزيد حجمها عن 10 ميغابايت، تقترح Apigee استخدام نمط عناوين URL مُوقَّعة داخل وسيلة شرح Apigee Java، موضّحة وسيلة شرح Edge: مثال على "منشئ عنوان URL الموقَّع" على GitHub.
البث
الخيار #3 : استخدام البث
إذا كان الخادم الوكيل لواجهة برمجة التطبيقات بحاجة إلى معالجة طلبات و/أو استجابات كبيرة جدًا، يمكنك تفعيل جارٍ البث في Apigee.
CwC
الخيار 4 : استخدام سمة CwC لزيادة حدّ المخزن المؤقت
ويجب استخدام هذا الخيار فقط عندما لا يمكنك استخدام أي من الخيارات المقترحة إذ قد مشكلات في الأداء في حالة زيادة الحجم الافتراضي.
توفّر Apigee سمة CwC التي تسمح بزيادة الحد الأقصى لحجم حمولة الطلبات والاستجابة. للحصول على التفاصيل، يُرجى الرجوع إلى ضبط الحدّ الأقصى لحجم الرسائل على "جهاز التوجيه" أو "معالج الرسائل"
الحدود
تتوقع Apigee ألا يرسل تطبيق العميل وخادم الخلفية أحجام حمولة أكبر من
الحد المسموح به كما هو موثق لـ Request/response size
في
حدود Apigee Edge
- إذا كنت مستخدمًا على السحابة الإلكترونية العامّة، سيكون الحدّ الأقصى للطلبات والردّ.
تم توثيق حجم الحمولة لـ
Request/response size
في حدود Apigee Edge - إذا كنت مستخدمًا خاصًا على السحابة الإلكترونية من المحتمل أنّك عدّلت الخيار التلقائي الحد المسموح به لحجم حمولة الطلب والاستجابة (على الرغم من أنه ليس ممارسة موصى بها). يمكنك تحديد الحد الأقصى لحجم حمولة الطلب باتّباع التعليمات الواردة في كيفية التحقّق من الحدّ الأقصى الحالي
كيف يمكن التحقّق من الحدّ الأقصى الحالي؟
يوضِّح هذا القسم كيفية إثبات ملكية الموقع الإلكتروني HTTPRequest.body.buffer.limit
.
تم تعديل بقيمة جديدة في معالِجات معالجة الرسائل.
- ابحث عن الموقع على جهاز "معالج الرسائل".
HTTPRequest.body.buffer.limit
في دليل/opt/apigee/edge-message- processor/conf
وتحقَّق من القيمة التي تم ضبطها باستخدام ما يلي: :grep -ri "HTTPRequest.body.buffer.limit" /opt/apigee/edge-message-processor/conf
- في ما يلي نموذج النتيجة من الأمر أعلاه:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.body.buffer.limit=10m
في مثال الإخراج أعلاه، لاحظ أن الخاصية تم ضبط
HTTPRequest.body.buffer.limit
على القيمة10m
فيhttp.properties
يشير ذلك إلى أنّ الحدّ الأقصى لحجم حمولة الطلب الذي تم ضبطه في Apigee for Private حجم السحابة الإلكترونية 10 ميغابايت.
إذا كنت لا تزال بحاجة إلى مساعدة من Apigee، يُرجى الانتقال إلى يجب جمع معلومات التشخيص.
يجب جمع معلومات التشخيص
اجمع معلومات التشخيص التالية، ثم تواصَل مع فريق دعم Apigee Edge:
إذا كنت من مستخدمي Cloud Public، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- إكمال أمر curl المستخدَم لإعادة إنتاج الخطأ
413
- ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات
إذا كنت من مستخدمي Cloud Private، يُرجى تقديم المعلومات التالية:
- ظهور رسالة خطأ كاملة للطلبات التي تعذّر تنفيذها
- اسم المؤسسة
- اسم البيئة
- حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات التي تعذّر تنفيذها
- إكمال أمر curl المستخدَم لإعادة إنتاج الخطأ
413
سجلّات وصول 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