431 درخواست فیلدهای سرصفحه خیلی بزرگ - TooBigHeaders

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

علامت

برنامه مشتری کد وضعیت HTTP 431 Request Header Fields Too Large با protocol.http.TooBigHeaders کد خطا را دریافت می کند.http.TooBigHeaders به ​​عنوان پاسخی برای تماس های API.

پیغام خطا

برنامه مشتری کد پاسخ زیر را دریافت می کند:

HTTP/1.1 431 Request Header Fields Too Large

علاوه بر این، ممکن است پیغام خطای زیر را مشاهده کنید:

{
   "fault":{
      "faultstring":"request headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

علل احتمالی

این خطا در صورتی رخ می دهد که حجم کل سرصفحه های درخواست ارسال شده توسط برنامه مشتری به Apigee Edge به عنوان بخشی از درخواست HTTP از حد مجاز در Apigee Edge مطابق با RFC 6585، بخش 5: 431 بیشتر باشد.

در اینجا دلایل احتمالی این خطا وجود دارد:

علت توضیحات دستورالعمل های عیب یابی قابل اجرا برای
اندازه سرصفحه درخواست بیشتر از حد مجاز است اندازه کل همه سرصفحه‌های ارسال شده توسط برنامه مشتری به عنوان بخشی از درخواست HTTP به Apigee Edge بیشتر از حد مجاز در Apigee Edge است. کاربران Edge Public و Private Cloud

مراحل تشخیص رایج

برای تشخیص این خطا از یکی از ابزارها/تکنیک های زیر استفاده کنید:

مانیتورینگ API

برای تشخیص خطا با استفاده از API Monitoring:

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

  3. به صفحه Analyze > API Monitoring > Investigate بروید.
  4. بازه زمانی خاصی را که در آن خطاها را مشاهده کرده اید انتخاب کنید.
  5. کد خطا را در برابر زمان ترسیم کنید.
  6. سلولی را انتخاب کنید که دارای protocol.http.TooBigHeaders کد خطا باشد.http.TooBigHeaders و کد وضعیت 431 مانند شکل زیر:

    ( مشاهده تصویر بزرگتر )

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

    ( مشاهده تصویر بزرگتر )

  8. روی View logs کلیک کنید و ردیف درخواست ناموفق را گسترش دهید:

    ( مشاهده تصویر بزرگتر )

  9. از پنجره Logs به جزئیات زیر توجه کنید:

    • کد وضعیت: 431
    • منبع خطا: apigee
    • کد خطا: protocol.http.TooBigHeaders .
    • طول درخواست (بایت): 32150 (> 25 KB)
  10. اگر منبع خطا دارای مقدار apigee یا MP باشد، کد خطا دارای protocol.http.TooBigHeaders ارزش است . درخواست بیشتر از حد مجاز در Apigee .

ابزار ردیابی

NGINX

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

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

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

    جایی که: ORG ، ENV ، و PORT# با مقادیر واقعی جایگزین می‌شوند.

  3. جستجو کنید تا ببینید آیا خطاهای 431 در طول یک مدت زمان مشخص وجود دارد (اگر مشکل در گذشته اتفاق افتاده است) یا آیا درخواست هایی وجود دارد که هنوز با 431 شکست خورده است.
  4. اگر هر 431 خطا را با کد X-Apigee-fault-code مطابق با مقدار protocol.http.TooBigHeaders پیدا کردید، سپس مقدار X-Apigee-fault-source را تعیین کنید.

    ورودی نمونه بالا از گزارش دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:

    سرصفحه های پاسخ ارزش
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source MP

    به طول درخواست توجه کنید: 40159 (40 کیلوبایت بیشتر از 25 کیلوبایت است، حد مجاز برای هدر درخواست در Apigee Edge)

    در ورودی نمونه گزارش بالا، منبع X-Apigee-fault دارای مقدار apigee یا MP است، کد X-Apigee-fault دارای protocol.http.TooBigHeaders مقدار است.http.TooBigHeaders و طول درخواست 40 کیلوبایت است که بزرگتر از مقدار محدودیت مجاز در Apigee - 25 کیلوبایت. این به وضوح نشان می دهد که حجم کل هدرهای درخواست ارسال شده توسط برنامه مشتری به عنوان بخشی از درخواست HTTP از حد مجاز 25 کیلوبایت در Apigee Edge فراتر رفته است.

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

تشخیص

  1. کد خطا ، منبع خطا و اندازه طول درخواست را برای خطای مشاهده شده با استفاده از مانیتورینگ API یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید.
  2. اگر منبع خطا دارای مقدار apigee یا MP باشد، کد خطا دارای protocol.http.TooBigHeaders مقدار باشد.http.TooBigHeaders، و طول درخواست بیش از 25 کیلوبایت باشد، این نشان می دهد که اندازه درخواست ارسال شده توسط برنامه مشتری به Apigee بزرگتر از محدودیت مجاز در Apigee Edge .
  3. می‌توانید با استفاده از یکی از روش‌های زیر تأیید کنید که اندازه سرصفحه‌های درخواست از حد مجاز ۲۵ کیلوبایت فراتر رفته است:

    پیغام خطا

    برای تأیید اعتبار با استفاده از پیام خطا:

    اگر به پیام خطای کامل دریافت شده از Apigee Edge دسترسی دارید، به faultstring مراجعه کنید. faultstring نشان می دهد که حجم کل سرصفحه های درخواست از حد مجاز 25 کیلوبایت فراتر رفته است.

    نمونه پیغام خطا:

    "faultstring":"request headers size exceeding 25,600"

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

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

    اگر به درخواست واقعی ارائه شده توسط برنامه مشتری دسترسی دارید، مراحل زیر را انجام دهید:

    1. اندازه هدرهای ارسال شده در درخواست را بررسی کنید.
    2. اگر متوجه شدید که اندازه کل هدرها بیشتر از حد مجاز در Apigee Edge است، دلیل این مشکل همین است.

      نمونه درخواست:

      curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>"
      

      در حالت فوق، اندازه کل سرصفحه های header0 ، header1 ، header2 و header3 بیشتر از 25 کیلوبایت است، یعنی حاوی بیش از 25 K کاراکتر ASCII (بایت) است.

      اگر از مشتری دیگری استفاده می کنید، می توانید گزارش های مشتری را بررسی کنید و سعی کنید اندازه خط درخواست ارسال شده به Apigee Edge را بیابید.

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

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

    اگر کاربر Private Cloud هستید، می‌توانید از گزارش‌های پردازشگر پیام برای تأیید اینکه اندازه سرصفحه درخواست از حد مجاز در Apigee Edge فراتر رفته است استفاده کنید.

    1. گزارش‌های پردازشگر پیام را بررسی کنید:

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

    2. جستجو کنید تا ببینید آیا خطاهای 431 در طول یک مدت زمان مشخص وجود دارد (اگر مشکل در گذشته اتفاق افتاده است) یا آیا درخواست هایی وجود دارد که هنوز با 431 شکست خورده است. می توانید از رشته های جستجوی زیر استفاده کنید.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. خطوطی را از system.log مشابه موارد زیر خواهید یافت:
      2021-07-27 08:30:28,419  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractRequestListener.onException() :
      Request:GET, uri:/test/, message Id:null,
      exception:com.apigee.errors.http.user.RequestHeadersTooLarge{
      code = protocol.http.TooBigHeaders, message = request headers size
      exceeding 25,600, associated contexts = []}, context:Context@9c5903
      input=ClientInputChannel(SSLClientChannel[Accepted:
      Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130
      useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms  lastIO=0ms
      isOpen=true)

      message = request headers size exceeding 25,600 در پیام خطای بالا نشان می دهد که حجم کل سرصفحه درخواست بیش از 25 کیلوبایت است. بنابراین، Apigee Edge استثنا com.apigee.errors.http.user.RequestHeadersTooLarge را پرتاب می کند و کد وضعیت 431 را با protocol.http.TooBigHeaders کد خطا.http.TooBigHeaders به ​​برنامه های مشتری برمی گرداند.

قطعنامه

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

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

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

    در مثالی که در بالا مورد بحث قرار گرفت، می‌توانید با ارسال پارامتر مقادیر هدر طولانی به عنوان بخشی از بدنه/بار درخواست، مشکل را برطرف کنید:

    curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
    
  3. اگر مطلوب است و می خواهید هدر بیش از حد مجاز ارسال کنید به گزینه بعدی بروید.

CwC

گزینه شماره 2: از ویژگی CwC برای افزایش محدودیت خط درخواست استفاده کنید

Apigee یک ویژگی CwC را ارائه می دهد که به آن اجازه می دهد محدودیت اندازه خط درخواست را افزایش دهد. برای جزئیات به تنظیم محدودیت خط درخواست در پردازشگر پیام مراجعه کنید

محدودیت ها

Apigee انتظار دارد که برنامه کلاینت و سرور باطن، سرصفحه‌های درخواست/پاسخی را که اندازه آنها از حد مجاز بیشتر است، همانطور که برای محدودیت اندازه سرصفحه درخواست/پاسخ در Apigee Edge Limits مستند شده است، ارسال نکند.

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

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

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

  1. در دستگاه Message Processor، ویژگی HTTPRequest.headers.limit را در پوشه /opt/apigee/edge-message-processor/conf جستجو کنید و بررسی کنید که چه مقداری مطابق شکل زیر تنظیم شده است:
    grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. نتیجه نمونه دستور بالا به شرح زیر است:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
  3. در خروجی مثال بالا، توجه داشته باشید که ویژگی HTTPRequest.headers.limit با مقدار 25k در http.properties تنظیم شده است.

    این نشان می دهد که محدودیت اندازه Request Header پیکربندی شده در Apigee برای Private Cloud 25 کیلوبایت است.

مشخصات

Apigee Edge انتظار دارد که برنامه کلاینت هدرهایی با اندازه بزرگ را به عنوان بخشی از درخواست ارسال نکند. در صورتی که درخواست حاوی هدرهایی با اندازه کل بیشتر از حد مشخص شده باشد، Apigee 431 Request Header Fields Too Large طبق مشخصات RFC زیر پرتاب می کند:

مشخصات
RFC 6585، بخش 5: 431 درخواست فیلدهای سرصفحه خیلی بزرگ است

اگر همچنان به کمک پشتیبانی Apigee نیاز دارید، به Must collect information diagnostic بروید.

باید اطلاعات تشخیصی را جمع آوری کرد

اطلاعات تشخیصی زیر را جمع آوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:

اگر کاربر Public Cloud هستید، اطلاعات زیر را ارائه دهید:

  • نام سازمان
  • نام محیط زیست
  • نام پروکسی API
  • دستور کامل curl که برای بازتولید خطای 431 استفاده می شود
  • فایل ردیابی برای درخواست های API

اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:

  • پیام خطای کامل برای درخواست های ناموفق مشاهده شد
  • نام سازمان
  • نام محیط زیست
  • بسته پروکسی API
  • فایل ردیابی برای درخواست های API ناموفق
  • دستور کامل curl که برای بازتولید خطای 431 استفاده می شود
  • گزارش های دسترسی 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