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

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

علامت

برنامه‌ی کلاینت، کد وضعیت HTTP با مقدار 431 Request Header Fields Too Large به همراه کد خطای protocol.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 Request Header Fields Too Large باشد.

در اینجا علل احتمالی این خطا آورده شده است:

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

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

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

نظارت بر API

برای تشخیص خطا با استفاده از مانیتورینگ API:

  1. به عنوان کاربری با نقش کاربری مناسب، وارد Apigee Edge UI شوید .
  2. به سازمانی که می‌خواهید مشکل را در آن بررسی کنید، مراجعه کنید.

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

    ( تصویر را بزرگتر ببینید )

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

    ( تصویر را بزرگتر ببینید )

  8. روی «مشاهده گزارش‌ها» کلیک کنید و ردیف مربوط به درخواست ناموفق را باز کنید:

    ( تصویر را بزرگتر ببینید )

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

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

ابزار ردیابی

انجینکس

برای تشخیص خطا با استفاده از گزارش‌های دسترسی 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 protocol.http.TooBigHeaders
    منبع گسل X-Apigee MP

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

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

علت: اندازه هدر درخواست بزرگتر از حد مجاز است

تشخیص

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

    پیام خطا

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

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

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

    "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 هزار کاراکتر ASCII (بایت) است.

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

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

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

    اگر شما یک کاربر Private Cloud هستید، می‌توانید از گزارش‌های Message Processor برای تأیید اینکه آیا اندازه Request Headers از حد مجاز در 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 در پیام خطای بالا نشان می‌دهد که اندازه کل هدرهای درخواست بیش از ۲۵ کیلوبایت است. بنابراین، Apigee Edge خطای com.apigee.errors.http.user.RequestHeadersTooLarge را صادر می‌کند و کد وضعیت 431 را با کد خطا protocol.http.TooBigHeaders به ​​برنامه‌های کلاینت برمی‌گرداند.

وضوح تصویر

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

گزینه شماره ۱ [توصیه شده]: برنامه کلاینت را طوری تنظیم کنید که هدرهای درخواست با اندازه کل بزرگتر از حد مجاز ارسال نکند

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

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

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

سی دبلیو سی

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

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

محدودیت‌ها

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

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

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

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

  1. در دستگاه پردازشگر پیام، در دایرکتوری /opt/apigee/edge-message-processor/conf به دنبال ویژگی HTTPRequest.headers.limit بگردید و بررسی کنید که چه مقداری مطابق شکل زیر تنظیم شده است:
    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 تنظیم شده است.

    این نشان می‌دهد که محدودیت اندازه هدر درخواست پیکربندی شده در Apigee برای ابر خصوصی، ۲۵ کیلوبایت است.

مشخصات

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

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

اگر هنوز به هرگونه کمکی از پشتیبانی Apigee نیاز دارید، به بخش «باید اطلاعات تشخیصی را جمع‌آوری کنید» بروید.

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

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

اگر کاربر فضای ابری عمومی هستید، اطلاعات زیر را ارائه دهید:

  • نام سازمان
  • نام محیط
  • نام پروکسی 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