شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید . اطلاعات
علامت
برنامهی کلاینت، کد وضعیت HTTP 413 Request Entity Too Large به همراه کد خطای protocol.http.TooBigBody را به عنوان پاسخی برای فراخوانیهای API دریافت میکند.
پیام خطا
برنامهی کلاینت کد پاسخ زیر را دریافت میکند:
HTTP/1.1 413 Request Entity Too Large
علاوه بر این، ممکن است پیام خطای زیر را مشاهده کنید:
{
"fault":{
"faultstring":"Body buffer overflow",
"detail":{
"errorcode":"protocol.http.TooBigBody"
}
}
}علل احتمالی
این خطا زمانی رخ میدهد که اندازهی بار دادهای که توسط برنامهی کلاینت به عنوان بخشی از درخواست HTTP به Apigee Edge ارسال میشود، بیشتر از حد مجاز در Apigee Edge باشد.
در اینجا علل احتمالی این خطا آورده شده است:
| علت | توضیحات | دستورالعملهای عیبیابی قابل اجرا برای |
|---|---|---|
| حجم درخواست بیشتر از حد مجاز است | حجم بار دادهای که توسط برنامهی کلاینت به عنوان بخشی از درخواست HTTP به Apigee Edge ارسال میشود، بیشتر از حد مجاز در Apigee Edge است. | کاربران فضای ابری عمومی و خصوصی Edge |
| حجم بار درخواستی پس از رفع فشار از حد مجاز فراتر میرود | حجم بار دادهای که توسط برنامهی کلاینت به عنوان بخشی از درخواست HTTP به Apigee Edge در قالب فشرده ارسال میشود، هنگام از حالت فشرده خارج کردن توسط Apigee Edge، بیشتر از حد مجاز است. | کاربران فضای ابری عمومی و خصوصی Edge |
مراحل تشخیص مشترک
برای تشخیص این خطا از یکی از ابزارها/تکنیکهای زیر استفاده کنید:
نظارت بر API
برای تشخیص خطا با استفاده از مانیتورینگ API:
- به عنوان کاربری با نقش کاربری مناسب، وارد Apigee Edge UI شوید .
به سازمانی که میخواهید مشکل را در آن بررسی کنید، مراجعه کنید

- به صفحه Analyze > API Monitoring > Investigate بروید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کردهاید، انتخاب کنید.
- شما میتوانید فیلتر پروکسی را برای محدود کردن کد خطا انتخاب کنید.
- رسم کد خطا در مقابل زمان .
سلولی را انتخاب کنید که دارای کد خطا
protocol.http.TooBigBodyو کد وضعیت413باشد، همانطور که در زیر نشان داده شده است:
اطلاعات مربوط به کد خطا
protocol.http.TooBigBodyمطابق شکل زیر نمایش داده میشود:
- روی «مشاهده گزارشها» کلیک کنید و ردیف مربوط به درخواست ناموفق را باز کنید. سپس از پنجره «گزارشها» ، جزئیات را مطابق شکل زیر یادداشت کنید:
فشرده نشده
سناریوی شماره ۱: درخواست ارسال محموله به صورت غیرفشرده

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

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

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

به اطلاعات زیر توجه کنید:
- کدگذاری محتوا: موجود نیست
- طول محتوا:
15360204
فشرده
سناریوی شماره ۲: درخواست ارسال بار داده به صورت فشرده

به اطلاعات زیر توجه کنید:
- رمزگذاری محتوا:
gzip - طول محتوا:
14969 - نوع محتوا:
application/x-gzip
- مراحل مختلف ردیابی را طی کنید و محل وقوع خرابی را پیدا کنید.
معمولاً خطا را در جریانی پس از مرحلهی «درخواست دریافتشده از کلاینت» مشاهده خواهید کرد، همانطور که در زیر نشان داده شده است:

- به مقدار خطا از مسیر ردیابی توجه کنید. مسیر نمونه بالا نشان میدهد:
- خطا:
Body buffer overflow - کلاس خطا:
com.apigee.errors.http.user.RequestTooLarge
- خطا:
به قسمت پاسخ ارسال شده به کلاینت بروید و مقادیر خطا را از مسیر ردیابی یادداشت کنید. نمونه مسیر ردیابی زیر نشان میدهد:
- خطا:
413 Request Entity Too Large - محتوای خطا:
{"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}

- خطا:
- در مسیر ردیابی، به مرحله AX (دادههای تحلیلی ثبتشده) بروید و روی آن کلیک کنید.
در بخش جزئیات فاز ، به پایین اسکرول کنید تا به متغیرها برسید .

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

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

متغیر client.received.content.length:
10489856 - جدول زیر توضیح میدهد که چرا خطای
413توسط Apigee تحت دو سناریو بر اساس مقدار متغیر client.received.content.length برگردانده میشود:سناریو مقدار طول محتوای دریافتی مشتری دلیل شکست درخواست Payload در قالب غیر فشرده حدود ۱۵ مگابایت حجم > حد مجاز ۱۰ مگابایت. درخواست Payload در قالب فشرده حدود ۱۰ مگابایت محدودیت حجم پس از رفع فشار از حد مجاز فراتر رفت
انجینکس
برای تشخیص خطا با استفاده از گزارشهای دسترسی 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 را تعیین کنید.فشرده نشده
سناریوی شماره ۱: درخواست اندازه بار داده در قالب غیرفشرده

ورودی نمونه بالا از لاگ دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:
هدرهای پاسخ ارزش کد خطای X-Apigee protocol.http.TooBigBodyمنبع گسل X-Apigee policyبه طول درخواست توجه کنید:
15360440(۱۴.۶ مگابایت > حد مجاز)فشرده
سناریوی شماره ۲: درخواست اندازه بار داده در قالب فشرده

ورودی نمونه بالا از لاگ دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:
هدرهای پاسخ ارزش کد خطای X-Apigee protocol.http.TooBigBodyمنبع گسل X-Apigee policyبه طول درخواست توجه کنید:
15264(۱۴.۹ کیلوبایت < حد مجاز)در این سناریو، Apigee Edge
413برمیگرداند، حتی با اینکه طول درخواست کمتر از حد مجاز است، زیرا ممکن است درخواست به صورت فشرده ارسال شده باشد و اندازهی payload پس از خارج کردن از حالت فشرده توسط Apigee Edge از حد مجاز فراتر رود.
علت: حجم بار درخواستی بیشتر از حد مجاز است
تشخیص
- کد خطا ، منبع خطا و اندازه بار درخواست را برای خطای مشاهده شده با استفاده از گزارشهای دسترسی API Monitoring، Trace Tool یا NGINX همانطور که در مراحل تشخیص مشترک با سناریوی شماره ۱ (فشرده نشده) توضیح داده شده است، تعیین کنید.
- اگر منبع خطا دارای
policyیاproxyمقدار باشد، این نشان میدهد که اندازه بار درخواست ارسال شده توسط برنامه کلاینت به Apigee بیشتر از حد مجاز در Apigee Edge است. - اندازه بار درخواست را همانطور که از مرحله ۱ تعیین شده است، تأیید کنید.
- اگر اندازهی بار داده (payload size) بیش از ۱۰ مگابایت باشد، پس دلیل خطا همین است.
- اگر اندازهی بار داده کمتر از حد مجاز ۱۰ مگابایت باشد، ممکن است بار دادهی درخواست به صورت فشرده ارسال شده باشد. به علت بروید: اندازهی بار دادهی درخواست پس از خارج کردن از حالت فشرده از حد مجاز فراتر رفته است.
- همچنین میتوانید با بررسی درخواست واقعی با استفاده از مراحل زیر، تأیید کنید که آیا اندازه بار درخواست واقعاً بالای 10 مگابایت است یا خیر:
- اگر به درخواست واقعی ارسال شده توسط برنامه کلاینت دسترسی ندارید، به Resolution بروید.
- اگر به درخواست واقعی ارسال شده توسط برنامه کلاینت دسترسی دارید، مراحل زیر را انجام دهید:
- اندازهی payload ارسالی در درخواست را تأیید کنید.
- اگر متوجه شدید که اندازهی payload بیشتر از حد مجاز در Apigee Edge است، پس مشکل از همینجا ناشی میشود.
درخواست نمونه:
curl http://<hostalias>/testtoobigbody -k -X POST -F file=@test15mbfile -v
در مورد فوق، فایل
test15mbfileحدود ۱۵ مگابایت است. اگر از کلاینت دیگری استفاده میکنید، لاگهای کلاینت را بررسی کنید تا اندازهی payload ارسالی را متوجه شوید.
وضوح تصویر
به قسمت رزولوشن بروید.
علت: حجم بار درخواستی پس از رفع فشار از حد مجاز فراتر میرود.
اگر بار داده درخواست در قالب فشرده ارسال شود و هدر درخواست Content-Encoding روی gzip , Apigee بار داده درخواست را از حالت فشرده خارج میکند. در طول فرآیند خارج کردن از حالت فشرده، اگر Apigee متوجه شود که اندازه بار داده بیشتر از 10 مگابایت، یعنی حد مجاز ، است، خارج کردن بیشتر از حالت فشرده را متوقف میکند و بلافاصله با خطای 413 Request Entity Too Large with error code protocol.http.TooBigBody پاسخ میدهد.
تشخیص
- کد خطا، منبع خطا ، را تعیین کنید و اندازه بار درخواستی برای خطای مشاهده شده با استفاده از گزارشهای API Monitoring، Trace Tool یا NGINX Access همانطور که در مراحل تشخیص مشترک با سناریوی شماره ۲ (فشرده شده) توضیح داده شده است.
- اگر منبع خطا دارای
policyیاproxyمقدار باشد، این نشان میدهد که اندازه بار درخواست ارسال شده توسط برنامه کلاینت به Apigee بیشتر از حد مجاز در Apigee Edge است. - اندازه بار درخواست (Request Payload Size) را همانطور که در مرحله ۱ تعیین شده است، تأیید کنید.
- اگر اندازهی بار داده (payload size) بیش از ۱۰ مگابایت باشد، پس دلیل خطا همین است.
- اگر اندازهی بار داده کمتر از حد مجاز ۱۰ مگابایت باشد، ممکن است بار دادهی درخواست به صورت فشرده ارسال شده باشد. در این صورت، اندازهی فشرده نشدهی بار دادهی درخواست فشرده را بررسی کنید.
- شما میتوانید با استفاده از یکی از روشهای زیر، اعتبارسنجی کنید که آیا درخواست از طرف کلاینت در قالب فشرده ارسال شده است و اندازه فشرده نشده آن بزرگتر از حد مجاز است یا خیر:
ردیابی
برای اعتبارسنجی با استفاده از ابزار Trace:
- اگر ردی از درخواست ناموفق گرفتهاید، به مراحل تفصیلی در بخش ردگیری و
- مقدار متغیر client.received.content.length را تعیین کنید.
- بررسی کنید که آیا درخواست کلاینت حاوی هدر Content-Encoding:
gzipبوده است یا خیر.
- اگر مقدار متغیر client.received.content.length بیشتر از 10 مگابایت، محدودیت مجاز و هدر درخواست Content-Encoding:
gzipباشد، دلیل این خطا همین است.
درخواست واقعی
برای اعتبارسنجی با استفاده از درخواست واقعی:
- اگر به درخواست واقعی ارسال شده توسط برنامه کلاینت دسترسی ندارید، به Resolution بروید.
- اگر به درخواست واقعی ارسال شده توسط برنامه کلاینت دسترسی دارید، مراحل زیر را انجام دهید:
- اندازهی payload ارسالی در درخواست را به همراه هدر
Content-Encodingارسالی در درخواست، تأیید کنید. بررسی کنید که آیا اندازه فشرده نشده payload بیشتر از حد مجاز در Apigee Edge است یا خیر.
نمونه درخواست:
curl https://<hostalias>/testtoobigbody -k -X POST -F file=@test15mbfile.gz -H "Content-Encoding: gzip" -v
در مورد بالا، فایل
test15mbfile.gzکمتر از محدودیت اندازه است؛ با این حال، اندازه فایل فشرده نشدهtest15mbfileحدود ۱۵ مگابایت است و هدرContent-Encodingآنgzipاست.اگر از کلاینت دیگری استفاده میکنید، لاگهای کلاینت را بررسی کنید تا اندازهی بار دادهی ارسالی و اینکه آیا هدر
Content-Encodingرویgzipتنظیم شده است یا خیر را بیابید.
- اندازهی payload ارسالی در درخواست را به همراه هدر
گزارشهای پردازنده پیام
برای اعتبارسنجی با استفاده از گزارشهای پردازشگر پیام:
- اگر شما یک کاربر ابر خصوصی هستید، میتوانید از گزارشهای پردازشگر پیام برای تعیین اطلاعات کلیدی در مورد خطاهای 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) بیش از ۱۰ مگابایت است و Apigee وقتی اندازه شروع به فراتر رفتن از حد مجاز ۱۰ مگابایت میکند، خطای
RequestTooLargeرا با کد خطاprotocol.http.TooBigBodyارسال میکند.
- اگر ردی از درخواست ناموفق گرفتهاید، به مراحل تفصیلی در بخش ردگیری و
وضوح تصویر
اندازه را ثابت کنید
گزینه شماره ۱ [توصیه شده]: برنامه کلاینت را طوری تنظیم کنید که حجم بار داده (payload) بیشتر از حد مجاز ارسال نکند.
- دلیل ارسال درخواست/حجم بار بیشتر از حد مجاز تعریف شده در Limits توسط کلاینت خاص را تجزیه و تحلیل کنید.
اگر مطلوب نیست، برنامه کلاینت خود را طوری تغییر دهید که اندازه درخواست/حجم بار ارسالی کمتر از حد مجاز باشد.
در مثالی که در بالا مورد بحث قرار گرفت، میتوانید با ارسال یک فایل با حجم کمتر، مثلاً
test5mbfile(با حجم ۵ مگابایت) به صورت زیر، مشکل را برطرف کنید:curl https://<host>/testtoobigbody -k -X POST -F file=@test5mbfile -v
- اگر مطلوب است و میخواهید درخواست/بار دادهای بیش از حد مجاز ارسال کنید، به گزینههای بعدی بروید.
الگوی URL امضا شده
گزینه شماره ۲ [توصیه میشود]: استفاده از الگوی URLهای امضا شده در Apigee JavaCallout
برای بارهای داده بزرگتر از ۱۰ مگابایت، Apigee استفاده از الگوی URLهای امضا شده در Apigee JavaCallout را توصیه میکند، که توسط مثال Edge Callout: Signed URL Generator در GitHub نشان داده شده است.
پخش جریانی
گزینه شماره ۳: استفاده از استریمینگ
اگر پروکسی API شما نیاز به مدیریت درخواستها و/یا پاسخهای بسیار بزرگ دارد، میتوانید پخش جریانی را در Apigee فعال کنید.
سی دبلیو سی
گزینه شماره ۴: استفاده از ویژگی CwC برای افزایش محدودیت بافر
این گزینه فقط زمانی باید استفاده شود که نمیتوانید از هیچ یک از گزینههای توصیهشده استفاده کنید، زیرا در صورت افزایش اندازه پیشفرض، ممکن است مشکلات عملکردی ایجاد شود.
Apigee یک ویژگی CwC ارائه میدهد که به آن اجازه میدهد محدودیت اندازه بار درخواست و پاسخ را افزایش دهد. برای جزئیات بیشتر، به تنظیم محدودیت اندازه پیام در روتر یا پردازنده پیام مراجعه کنید.
محدودیتها
شرکت Apigee انتظار دارد که برنامهی کلاینت و سرور backend، اندازهی بار داده (payload) بزرگتر از حد مجاز، همانطور که برای Request/response size در Apigee Edge Limits مستند شده است، ارسال نکنند.
- اگر شما یک کاربر ابر عمومی هستید، حداکثر محدودیت برای اندازه بار درخواست و پاسخ، همانطور که برای
Request/response sizeدر Apigee Edge Limits مستند شده است، میباشد. - اگر شما یک کاربر Private Cloud هستید، ممکن است محدودیت پیشفرض برای اندازه بار درخواست و پاسخ را تغییر داده باشید (هرچند که این یک روش توصیه شده نیست). میتوانید حداکثر محدودیت اندازه بار درخواست را با دنبال کردن دستورالعملهای موجود در بخش «نحوه بررسی محدودیت فعلی» تعیین کنید.
چگونه حد فعلی را بررسی کنیم؟
این بخش توضیح میدهد که چگونه میتوان تأیید کرد که ویژگی 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 برای Private Cloud، 10 مگابایت است.
اگر هنوز به هرگونه کمکی از پشتیبانی Apigee نیاز دارید، به بخش «باید اطلاعات تشخیصی را جمعآوری کنید» بروید.
باید اطلاعات تشخیصی جمعآوری کند
اطلاعات تشخیصی زیر را جمعآوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:
اگر کاربر فضای ابری عمومی هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط
- نام پروکسی 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