شما در حال مشاهده اسناد 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.TooBigBody
Fault 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.TooBigBody
X-Apigee-fault-source policy
به طول درخواست توجه کنید:
15360440
(14.6 مگابایت > حد مجاز)فشرده شده
سناریوی شماره 2: درخواست اندازه بار در قالب فشرده
ورودی نمونه بالا از گزارش دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:
سرصفحه های پاسخ ارزش X-Apigee-fault-code protocol.http.TooBigBody
X-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-Encoding
gzip
است.اگر از کلاینت دیگری استفاده میکنید، گزارشهای مشتری را دریافت کنید تا از اندازه بار ارسالی مطلع شوید و آیا هدر
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