شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
علامت
برنامه سرویس گیرنده کد وضعیت HTTP 413 Request Entity Too Large با protocol.http.TooBigBody کد خطا را دریافت می کند.http.TooBigBody به عنوان پاسخی برای تماس های API.
پیغام خطا
برنامه مشتری کد پاسخ زیر را دریافت می کند:
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 |
مراحل تشخیص رایج
برای تشخیص این خطا از یکی از ابزارها/تکنیک های زیر استفاده کنید:
مانیتورینگ API
برای تشخیص خطا با استفاده از API Monitoring:
- به عنوان کاربر با نقش مناسب وارد رابط کاربری Apigee Edge شوید .
به سازمانی که میخواهید در آن موضوع را بررسی کنید بروید

- به صفحه Analyze > API Monitoring > Investigate بروید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کرده اید انتخاب کنید.
- میتوانید فیلتر Proxy را برای محدود کردن کد خطا انتخاب کنید.
- کد خطا را در برابر زمان ترسیم کنید.
سلولی را انتخاب کنید که دارای
protocol.http.TooBigBodyFault Code.http.TooBigBody و کد وضعیت413باشد، همانطور که در زیر نشان داده شده است:
اطلاعات مربوط به
protocol.http.TooBigBodyکد خطا.http.TooBigBody مطابق شکل زیر نمایش داده می شود:
- روی View logs کلیک کنید و ردیف درخواست ناموفق را گسترش دهید. سپس از پنجره Logs ، جزئیات را مانند شکل زیر یادداشت کنید:
فشرده نشده
سناریوی شماره 1: درخواست Payload به صورت غیر فشرده ارسال شده است

از پنجره Logs به جزئیات زیر توجه کنید:
- کد وضعیت:
413 - منبع خطا:
proxy - کد خطا:
protocol.http.TooBigBody. - طول درخواست (بایت):
15360440(~15 مگابایت)
اگر منبع خطا دارای
proxyمقدار باشد، کد خطا دارایprotocol.http.TooBigBodyمقدار باشد.http.TooBigBody، و طول درخواست بیش از 10 مگابایت باشد، آنگاه نشان میدهد که درخواست HTTP از مشتری دارای اندازه بار درخواستی بیشتر از حد مجاز است. در Apigee .فشرده شده
سناریوی شماره 2: درخواست ارسال بار به صورت فشرده

از پنجره Logs به جزئیات زیر توجه کنید:
- کد وضعیت:
413 - منبع خطا:
proxy - کد خطا:
protocol.http.TooBigBody. - طول درخواست (بایت):
15264(~15 کیلوبایت)
اگر منبع خطا دارای
proxyمقدار باشد، کد خطا دارایprotocol.http.TooBigBodyمقدار باشد.http.TooBigBody، و طول درخواست کمتر از 10 مگابایت باشد، آنگاه نشان میدهد که درخواست HTTP از مشتری دارای اندازه بار درخواستی کمتر از حد مجاز است. محدودیت در فرمت فشرده آن، اما اندازه محموله زمانی که توسط Apigee فشرده نشود، بیشتر از حد مجاز است. - کد وضعیت:
ردیابی
برای تشخیص خطا با استفاده از ابزار Trace:
- جلسه ردیابی و یکی را فعال کنید
- منتظر بمانید تا خطای
413 Request Entity Too Largeرخ دهد یا - اگر میتوانید مشکل را تکرار کنید، تماس API را برقرار کنید و خطای
413 Request Entity Too Largeرا تکرار کنید.
- منتظر بمانید تا خطای
اطمینان حاصل کنید که نمایش همه اطلاعات جریان فعال است.

- یکی از درخواست های ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
- به مرحله درخواست دریافت شده از مشتری بروید.
فشرده نشده
سناریوی شماره 1: درخواست Payload به صورت غیر فشرده ارسال شده است

به اطلاعات زیر توجه کنید:
- Content-Encoding: موجود نیست
- طول محتوا:
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"}}}

- خطا:
- در Trace به فاز AX (Analytics Data Recorded) بروید و روی آن کلیک کنید.
در قسمت Phase Details ، به پایین بروید تا Variables Read .

- مقدار متغیر client.received.content.length را تعیین کنید که نشان می دهد:
- اندازه واقعی بار درخواست زمانی که در فرمت غیر فشرده ارسال می شود و
- اندازه بار درخواستی پس از فشرده سازی توسط Apigee، زمانی که محموله در قالب فشرده ارسال می شود. در این سناریو همیشه همان مقدار حد مجاز (10 مگابایت) خواهد بود.
فشرده نشده
سناریوی شماره 1: درخواست بار به صورت غیر فشرده

متغیر client.received.content.length:
15360204فشرده شده
سناریوی شماره 2: درخواست بار در قالب فشرده

متغیر client.received.content.length:
10489856 - جدول زیر توضیح می دهد که چرا خطای
413توسط Apigee تحت دو سناریو بر اساس مقدار متغیر client.received.content.length برمی گردد:سناریو ارزش client.received.content.length دلیل شکست درخواست Payload در قالب غیر فشرده ~ 15 مگابایت اندازه > حد مجاز 10 مگابایت. درخواست Payload در فرمت فشرده ~ 10 مگابایت با رفع فشار از حد مجاز اندازه بیشتر شد
NGINX
برای تشخیص خطا با استفاده از گزارش های دسترسی NGINX:
- اگر کاربر Private Cloud هستید، میتوانید از گزارشهای دسترسی 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-source است:
سرصفحه های پاسخ ارزش X-Apigee-fault-code protocol.http.TooBigBodyX-Apigee-fault-source policyبه طول درخواست توجه کنید:
15360440(14.6 مگابایت > حد مجاز)فشرده شده
سناریوی شماره 2: درخواست اندازه بار در قالب فشرده

ورودی نمونه بالا از گزارش دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:
سرصفحه های پاسخ ارزش X-Apigee-fault-code protocol.http.TooBigBodyX-Apigee-fault-source policyبه طول درخواست توجه کنید:
15264(14.9 K <محدودیت مجاز)در این سناریو، Apigee Edge
413را برمیگرداند، حتی اگر طول درخواست کمتر از حد مجاز باشد، زیرا ممکن است درخواست در قالب فشرده ارسال شده باشد و اندازه بار از حد مجاز فراتر رفته است.
علت: درخواست حجم بار بیشتر از حد مجاز است
تشخیص
- کد خطا ، منبع خطا و درخواست حجم بار برای خطای مشاهده شده با استفاده از گزارش های دسترسی API، Trace Tool یا NGINX همانطور که در مراحل تشخیص رایج با سناریوی شماره 1 توضیح داده شده است (غیر فشرده) تعیین کنید.
- اگر منبع خطا دارای
policyمقدار یاproxyباشد، این نشان می دهد که اندازه بار درخواست ارسال شده توسط برنامه مشتری به Apigee از حد مجاز در Apigee Edge بیشتر است. - اندازه بار درخواستی را همانطور که از مرحله شماره 1 تعیین شده است تأیید کنید.
- اگر حجم محموله بیش از 10 مگابایت محدودیت مجاز است، پس این دلیل خطا است.
- اگر حجم محموله کمتر از 10 مگابایت حد مجاز باشد، ممکن است بار درخواستی در قالب فشرده ارسال شود. برو به علت: اندازه محموله درخواستی پس از رفع فشار از حد مجاز فراتر می رود
- همچنین میتوانید با بررسی درخواست واقعی با استفاده از مراحل زیر تأیید کنید که حجم بار درخواست واقعاً > 10 مگابایت حد مجاز است:
- اگر به درخواست واقعی ارائه شده توسط برنامه مشتری دسترسی ندارید، به Resolution بروید.
- اگر به درخواست واقعی ارائه شده توسط برنامه مشتری دسترسی دارید، مراحل زیر را انجام دهید:
- اندازه بار ارسال شده در درخواست را بررسی کنید.
- اگر متوجه شدید که اندازه محموله بیش از حد مجاز در Apigee Edge است، دلیل این مشکل همین است.
نمونه درخواست:
curl http://<hostalias>/testtoobigbody -k -X POST -F file=@test15mbfile -v
در مورد بالا، فایل
test15mbfileفایل ~15 مگابایت است. اگر از مشتری دیگری استفاده می کنید، گزارش های مشتری را دریافت کنید تا اندازه بار ارسال شده را بدانید.
قطعنامه
به Resolution بروید.
علت: درخواست حجم بار از حد مجاز پس از رفع فشار بیشتر است
اگر بار درخواست در قالب فشرده ارسال شود و هدر درخواست Content-Encoding روی gzip , Apigee بار درخواست را از حالت فشرده خارج می کند. در طول فرآیند رفع فشردهسازی، اگر Apigee اندازه محموله را بیشتر از 10 مگابایت، حد مجاز ، بیابد، سپس فشردهسازی بیشتر را متوقف میکند و بلافاصله با 413 Request Entity Too Large با protocol.http.TooBigBody کد خطا پاسخ میدهد.http.TooBigBody.
تشخیص
- کد خطا، منبع خطا را تعیین کنید، و درخواست اندازه Payload برای خطای مشاهده شده با استفاده از API Monitoring، Trace Tool یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج با سناریوی شماره 2 (فشرده شده) توضیح داده شده است.
- اگر منبع خطا دارای
policyمقدار یاproxyباشد، این نشان میدهد که اندازه بار درخواست ارسال شده توسط برنامه مشتری به Apigee از حد مجاز در Apigee Edge بیشتر است. - اندازه بار بار درخواستی را همانطور که در مرحله 1 تعیین شده است تأیید کنید.
- اگر حجم محموله بیش از 10 مگابایت محدودیت مجاز است، پس این دلیل خطا است.
- اگر حجم محموله کمتر از 10 مگابایت حد مجاز باشد، ممکن است بار درخواستی در قالب فشرده ارسال شود. در این مورد، اندازه فشرده نشده بار درخواست فشرده را بررسی کنید.
- اگر درخواست مشتری در قالب فشرده ارسال شده باشد و اندازه غیرفشرده بیشتر از حد مجاز باشد، میتوانید با استفاده از یکی از روشهای زیر اعتبارسنجی کنید:
ردیابی
برای اعتبارسنجی با استفاده از ابزار Trace:
- اگر ردی برای درخواست ناموفق ثبت کرده اید، به مراحل شرح داده شده در Trace و مراجعه کنید
- مقدار متغیر client.received.content.length را تعیین کنید
- بررسی کنید که آیا درخواست مشتری حاوی سرصفحه Content-Encoding:
gzipاست یا خیر
- اگر مقدار متغیر client.received.content.length از 10 مگابایت، حد مجاز و سرصفحه درخواست Content-Encoding:
gzipبیشتر باشد، پس دلیل این خطا همین است.
درخواست واقعی
برای تأیید اعتبار با استفاده از درخواست واقعی:
- اگر به درخواست واقعی ارائه شده توسط برنامه مشتری دسترسی ندارید، به Resolution بروید.
- اگر به درخواست واقعی ارائه شده توسط برنامه مشتری دسترسی دارید، مراحل زیر را انجام دهید:
- اندازه بار ارسال شده در درخواست را به همراه هدر
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-Encodinggzipاست.اگر از کلاینت دیگری استفاده میکنید، گزارشهای مشتری را دریافت کنید تا از اندازه بار ارسالی مطلع شوید و آیا هدر
Content-Encodingرویgzipتنظیم شده است.
- اندازه بار ارسال شده در درخواست را به همراه هدر
گزارشهای پردازشگر پیام
برای تأیید اعتبار با استفاده از گزارشهای پردازشگر پیام:
- اگر کاربر Private Cloud هستید، میتوانید از گزارشهای پردازشگر پیام برای تعیین اطلاعات کلیدی درباره خطاهای 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
به این معنی است که Request Payload Size بیش از 10 مگابایت است و Apigee خطای
RequestTooLargeزمانی که اندازه شروع به تجاوز از حد مجاز 10 مگابایت با کد خطا به عنوانprotocol.http.TooBigBodyمی کند، پرتاب می کند.http.TooBigBody
- اگر ردی برای درخواست ناموفق ثبت کرده اید، به مراحل شرح داده شده در Trace و مراجعه کنید
قطعنامه
اندازه را ثابت کنید
گزینه شماره 1 [توصیه میشود]: برنامه مشتری را اصلاح کنید تا حجم بار بیش از حد مجاز ارسال نشود
- دلیل ارسال درخواست / حجم محموله بیشتر از حد مجاز توسط مشتری خاص را که در Limits تعریف شده است، تجزیه و تحلیل کنید.
اگر مطلوب نیست، برنامه مشتری خود را طوری تغییر دهید که اندازه درخواست / حجم بار کمتر از حد مجاز ارسال شود.
در مثالی که در بالا توضیح داده شد، میتوانید مشکل را با ارسال یک فایل با اندازه کوچکتر حل کنید، مثلاً
test5mbfile(با اندازه 5 مگابایت) مانند تصویر زیر:curl https://<host>/testtoobigbody -k -X POST -F file=@test5mbfile -v
- اگر مطلوب است و می خواهید درخواست/باری بیش از حد مجاز ارسال کنید، به گزینه های بعدی بروید.
الگوی URL امضا شده
گزینه شماره 2 [توصیه می شود]: از الگوی URL های امضا شده در یک Apigee JavaCallout استفاده کنید
برای بارهای بزرگتر از 10 مگابایت، Apigee استفاده از الگوی URLهای امضا شده در یک Apigee JavaCallout را توصیه میکند که با مثال Edge Callout: Signed URL Generator در GitHub نشان داده شده است.
جریان
گزینه شماره 3: از پخش جریانی استفاده کنید
اگر پروکسی API شما نیاز به رسیدگی به درخواستها و/یا پاسخهای بسیار بزرگ دارد، میتوانید جریان را در Apigee فعال کنید.
CwC
گزینه شماره 4: از ویژگی CwC برای افزایش حد بافر استفاده کنید
این گزینه باید فقط زمانی استفاده شود که نمی توانید از هیچ یک از گزینه های توصیه شده استفاده کنید زیرا در صورت افزایش اندازه پیش فرض ممکن است مشکلات عملکردی وجود داشته باشد.
Apigee یک ویژگی CwC را ارائه می دهد که به آن اجازه می دهد محدودیت اندازه بار درخواست و پاسخ را افزایش دهد. برای جزئیات، به تنظیم محدودیت اندازه پیام در روتر یا پردازشگر پیام مراجعه کنید
محدودیت ها
Apigee انتظار دارد که برنامه کلاینت و سرور پشتیبان اندازه های باری بیشتر از حد مجاز را که برای Request/response size در Apigee Edge Limits مستند شده است ارسال نکند.
- اگر کاربر Public Cloud هستید، حداکثر محدودیت اندازه بار درخواست و پاسخ همانگونه است که برای
Request/response sizeدر Apigee Edge Limits مستند شده است. - اگر کاربر Private Cloud هستید، ممکن است محدودیت پیشفرض برای اندازه بار درخواست و پاسخ را تغییر داده باشید (حتی اگر این یک عمل توصیهشده نیست). با دنبال کردن دستورالعملهای نحوه بررسی محدودیت فعلی، میتوانید حداکثر محدودیت اندازه بار درخواستی را تعیین کنید.
چگونه حد فعلی را بررسی کنیم؟
این بخش نحوه تأیید اینکه ویژگی HTTPRequest.body.buffer.limit با یک مقدار جدید در پردازشگرهای پیام به روز شده است را توضیح می دهد.
- در دستگاه Message Processor، ویژگی
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 برای Private Cloud 10 مگابایت است.
اگر همچنان به کمک پشتیبانی Apigee نیاز دارید، به Must collect information diagnostic بروید.
باید اطلاعات تشخیصی را جمع آوری کرد
اطلاعات تشخیصی زیر را جمع آوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:
اگر کاربر Public Cloud هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط زیست
- نام پروکسی API
- دستور کامل curl که برای بازتولید خطای
413استفاده می شود - فایل ردیابی برای درخواست های API
اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:
- پیام خطای کامل برای درخواست های ناموفق مشاهده شد
- نام سازمان
- نام محیط زیست
- بسته پروکسی API
- فایل ردیابی برای درخواست های API ناموفق
- دستور کامل 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