413 درخواست موجودیت خیلی بزرگ - TooBigBody

شما در حال مشاهده اسناد 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:

  1. به عنوان کاربر با نقش مناسب وارد رابط کاربری Apigee Edge شوید .
  2. به سازمانی که می‌خواهید در آن موضوع را بررسی کنید بروید

  3. به صفحه Analyze > API Monitoring > Investigate بروید.
  4. بازه زمانی خاصی را که در آن خطاها را مشاهده کرده اید انتخاب کنید.
  5. می‌توانید فیلتر Proxy را برای محدود کردن کد خطا انتخاب کنید.
  6. کد خطا را در برابر زمان ترسیم کنید.
  7. سلولی را انتخاب کنید که دارای protocol.http.TooBigBody Fault Code.http.TooBigBody و کد وضعیت 413 باشد، همانطور که در زیر نشان داده شده است:

  8. اطلاعات مربوط به protocol.http.TooBigBody کد خطا.http.TooBigBody مطابق شکل زیر نمایش داده می شود:

  9. روی 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:

  1. جلسه ردیابی و یکی را فعال کنید
    • منتظر بمانید تا خطای 413 Request Entity Too Large رخ دهد یا
    • اگر می‌توانید مشکل را تکرار کنید، تماس API را برقرار کنید و خطای 413 Request Entity Too Large را تکرار کنید.
  2. اطمینان حاصل کنید که نمایش همه اطلاعات جریان فعال است.

  3. یکی از درخواست های ناموفق را انتخاب کنید و ردیابی را بررسی کنید.
  4. به مرحله درخواست دریافت شده از مشتری بروید.

    فشرده نشده

    سناریوی شماره 1: درخواست Payload به صورت غیر فشرده ارسال شده است

    به اطلاعات زیر توجه کنید:

    • Content-Encoding: موجود نیست
    • طول محتوا: 15360204

    فشرده شده

    سناریوی شماره 2: درخواست ارسال بار به صورت فشرده

    به اطلاعات زیر توجه کنید:

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

  7. به مقدار خطا از ردیابی توجه کنید. ردیابی نمونه بالا نشان می دهد:
    • خطا: Body buffer overflow
    • error.class: com.apigee.errors.http.user.RequestTooLarge
  8. به Response Sent to Client بروید و مقادیر خطا را از ردیابی یادداشت کنید. ردیابی نمونه زیر نشان می دهد:

    • خطا: 413 Request Entity Too Large
    • محتوای خطا: {"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}
  9. در Trace به فاز AX (Analytics Data Recorded) بروید و روی آن کلیک کنید.
  10. در قسمت Phase Details ، به پایین بروید تا Variables Read .

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

    فشرده نشده

    سناریوی شماره 1: درخواست بار به صورت غیر فشرده

    متغیر client.received.content.length: 15360204

    فشرده شده

    سناریوی شماره 2: درخواست بار در قالب فشرده

    متغیر client.received.content.length: 10489856

  12. جدول زیر توضیح می دهد که چرا خطای 413 توسط Apigee تحت دو سناریو بر اساس مقدار متغیر client.received.content.length برمی گردد:
    سناریو ارزش client.received.content.length دلیل شکست
    درخواست Payload در قالب غیر فشرده ~ 15 مگابایت اندازه > حد مجاز 10 مگابایت.
    درخواست Payload در فرمت فشرده ~ 10 مگابایت

    با رفع فشار از حد مجاز اندازه بیشتر شد

NGINX

برای تشخیص خطا با استفاده از گزارش های دسترسی NGINX:

  1. اگر کاربر Private Cloud هستید، می‌توانید از گزارش‌های دسترسی NGINX برای تعیین اطلاعات کلیدی درباره خطاهای HTTP 413 استفاده کنید.
  2. گزارش های دسترسی NGINX را بررسی کنید:

    /opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log

  3. جستجو کنید تا ببینید آیا خطاهای 413 در طول یک مدت زمان مشخص وجود دارد (اگر مشکل در گذشته اتفاق افتاده است) یا آیا درخواست هایی وجود دارد که هنوز با 413 ناموفق هستند.
  4. اگر هر گونه خطای 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 را برمی‌گرداند، حتی اگر طول درخواست کمتر از حد مجاز باشد، زیرا ممکن است درخواست در قالب فشرده ارسال شده باشد و اندازه بار از حد مجاز فراتر رفته است.

علت: درخواست حجم بار بیشتر از حد مجاز است

تشخیص

  1. کد خطا ، منبع خطا و درخواست حجم بار برای خطای مشاهده شده با استفاده از گزارش های دسترسی API، Trace Tool یا NGINX همانطور که در مراحل تشخیص رایج با سناریوی شماره 1 توضیح داده شده است (غیر فشرده) تعیین کنید.
  2. اگر منبع خطا دارای policy مقدار یا proxy باشد، این نشان می دهد که اندازه بار درخواست ارسال شده توسط برنامه مشتری به Apigee از حد مجاز در Apigee Edge بیشتر است.
  3. اندازه بار درخواستی را همانطور که از مرحله شماره 1 تعیین شده است تأیید کنید.
  4. همچنین می‌توانید با بررسی درخواست واقعی با استفاده از مراحل زیر تأیید کنید که حجم بار درخواست واقعاً > 10 مگابایت حد مجاز است:
    1. اگر به درخواست واقعی ارائه شده توسط برنامه مشتری دسترسی ندارید، به Resolution بروید.
    2. اگر به درخواست واقعی ارائه شده توسط برنامه مشتری دسترسی دارید، مراحل زیر را انجام دهید:
      1. اندازه بار ارسال شده در درخواست را بررسی کنید.
      2. اگر متوجه شدید که اندازه محموله بیش از حد مجاز در Apigee Edge است، دلیل این مشکل همین است.
      3. نمونه درخواست:

        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.

تشخیص

  1. کد خطا، منبع خطا را تعیین کنید، و درخواست اندازه Payload برای خطای مشاهده شده با استفاده از API Monitoring، Trace Tool یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج با سناریوی شماره 2 (فشرده شده) توضیح داده شده است.
  2. اگر منبع خطا دارای policy مقدار یا proxy باشد، این نشان می‌دهد که اندازه بار درخواست ارسال شده توسط برنامه مشتری به Apigee از حد مجاز در Apigee Edge بیشتر است.
  3. اندازه بار بار درخواستی را همانطور که در مرحله 1 تعیین شده است تأیید کنید.
    • اگر حجم محموله بیش از 10 مگابایت محدودیت مجاز است، پس این دلیل خطا است.
    • اگر حجم محموله کمتر از 10 مگابایت حد مجاز باشد، ممکن است بار درخواستی در قالب فشرده ارسال شود. در این مورد، اندازه فشرده نشده بار درخواست فشرده را بررسی کنید.
  4. اگر درخواست مشتری در قالب فشرده ارسال شده باشد و اندازه غیرفشرده بیشتر از حد مجاز باشد، می‌توانید با استفاده از یکی از روش‌های زیر اعتبارسنجی کنید:

    ردیابی

    برای اعتبارسنجی با استفاده از ابزار Trace:

    1. اگر ردی برای درخواست ناموفق ثبت کرده اید، به مراحل شرح داده شده در Trace و مراجعه کنید
      1. مقدار متغیر client.received.content.length را تعیین کنید
      2. بررسی کنید که آیا درخواست مشتری حاوی سرصفحه Content-Encoding: gzip است یا خیر
    2. اگر مقدار متغیر client.received.content.length از 10 مگابایت، حد مجاز و سرصفحه درخواست Content-Encoding: gzip بیشتر باشد، پس دلیل این خطا همین است.

    درخواست واقعی

    برای تأیید اعتبار با استفاده از درخواست واقعی:

    1. اگر به درخواست واقعی ارائه شده توسط برنامه مشتری دسترسی ندارید، به Resolution بروید.
    2. اگر به درخواست واقعی ارائه شده توسط برنامه مشتری دسترسی دارید، مراحل زیر را انجام دهید:
      1. اندازه بار ارسال شده در درخواست را به همراه هدر Content-Encoding ارسال شده در درخواست بررسی کنید.
      2. بررسی کنید که آیا اندازه فشرده نشده محموله بیشتر از حد مجاز در 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 تنظیم شده است.

    گزارش‌های پردازشگر پیام

    برای تأیید اعتبار با استفاده از گزارش‌های پردازشگر پیام:

    1. اگر کاربر Private Cloud هستید، می‌توانید از گزارش‌های پردازشگر پیام برای تعیین اطلاعات کلیدی درباره خطاهای HTTP 413 استفاده کنید.
    2. گزارش‌های پردازشگر پیام را بررسی کنید:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    3. جستجو کنید تا ببینید آیا خطاهای 413 در طول یک مدت زمان مشخص وجود دارد (اگر مشکل در گذشته اتفاق افتاده است) یا آیا درخواست هایی وجود دارد که هنوز با 413 ناموفق هستند.

      می توانید از رشته های جستجوی زیر استفاده کنید:

      grep -ri "chunkCount"
      
      grep -ri "RequestTooLarge"
      
    4. خطوطی از 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
    5. در طول فرآیند فشرده سازی، به محض اینکه پردازشگر پیام تشخیص داد که کل بایت های خوانده شده > 10 مگابایت است، متوقف می شود و خط زیر را چاپ می کند:
      Message is too large.  TotalRead 10489856 chunkCount 2570

      به این معنی است که Request Payload Size بیش از 10 مگابایت است و Apigee خطای RequestTooLarge زمانی که اندازه شروع به تجاوز از حد مجاز 10 مگابایت با کد خطا به عنوان protocol.http.TooBigBody می کند، پرتاب می کند.http.TooBigBody

قطعنامه

اندازه را ثابت کنید

گزینه شماره 1 [توصیه می‌شود]: برنامه مشتری را اصلاح کنید تا حجم بار بیش از حد مجاز ارسال نشود

  1. دلیل ارسال درخواست / حجم محموله بیشتر از حد مجاز توسط مشتری خاص را که در Limits تعریف شده است، تجزیه و تحلیل کنید.
  2. اگر مطلوب نیست، برنامه مشتری خود را طوری تغییر دهید که اندازه درخواست / حجم بار کمتر از حد مجاز ارسال شود.

    در مثالی که در بالا توضیح داده شد، می‌توانید مشکل را با ارسال یک فایل با اندازه کوچک‌تر حل کنید، مثلاً test5mbfile (با اندازه 5 مگابایت) مانند تصویر زیر:

    curl https://<host>/testtoobigbody -k -X POST -F file=@test5mbfile -v
    
  3. اگر مطلوب است و می خواهید درخواست/باری بیش از حد مجاز ارسال کنید، به گزینه های بعدی بروید.

الگوی 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 مستند شده است ارسال نکند.

  1. اگر کاربر Public Cloud هستید، حداکثر محدودیت اندازه بار درخواست و پاسخ همانگونه است که برای Request/response size در Apigee Edge Limits مستند شده است.
  2. اگر کاربر Private Cloud هستید، ممکن است محدودیت پیش‌فرض برای اندازه بار درخواست و پاسخ را تغییر داده باشید (حتی اگر این یک عمل توصیه‌شده نیست). با دنبال کردن دستورالعمل‌های نحوه بررسی محدودیت فعلی، می‌توانید حداکثر محدودیت اندازه بار درخواستی را تعیین کنید.

چگونه حد فعلی را بررسی کنیم؟

این بخش نحوه تأیید اینکه ویژگی HTTPRequest.body.buffer.limit با یک مقدار جدید در پردازشگرهای پیام به روز شده است را توضیح می دهد.

  1. در دستگاه Message Processor، ویژگی HTTPRequest.body.buffer.limit را در پوشه /opt/apigee/edge-message- processor/conf جستجو کنید و بررسی کنید که چه مقداری با استفاده از دستور زیر تنظیم شده است:
    grep -ri "HTTPRequest.body.buffer.limit" /opt/apigee/edge-message-processor/conf
    
  2. نتیجه نمونه دستور بالا به شرح زیر است:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.body.buffer.limit=10m
  3. در خروجی مثال بالا، توجه کنید که ویژگی 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