شما در حال مشاهده اسناد 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:
- به عنوان کاربر با نقش مناسب وارد رابط کاربری Apigee Edge شوید .
به سازمانی که میخواهید در آن موضوع را بررسی کنید بروید.
- به صفحه Analyze > API Monitoring > Investigate بروید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کرده اید انتخاب کنید.
- کد خطا را در برابر زمان ترسیم کنید.
- سلولی را انتخاب کنید که دارای
protocol.http.TooBigHeaders
کد خطا باشد.http.TooBigHeaders و کد وضعیت431
مانند شکل زیر: اطلاعات مربوط به
protocol.http.TooBigHeaders
کد خطا را مشاهده خواهید کرد.http.TooBigHeaders مانند شکل زیر:روی View logs کلیک کنید و ردیف درخواست ناموفق را گسترش دهید:
از پنجره Logs به جزئیات زیر توجه کنید:
- کد وضعیت:
431
- منبع خطا:
apigee
- کد خطا:
protocol.http.TooBigHeaders
. - طول درخواست (بایت):
32150 (> 25 KB)
- کد وضعیت:
- اگر منبع خطا دارای مقدار
apigee
یاMP
باشد، کد خطا دارایprotocol.http.TooBigHeaders
ارزش است . درخواست بیشتر از حد مجاز در Apigee .
ابزار ردیابی
NGINX
برای تشخیص خطا با استفاده از گزارش های دسترسی NGINX:
- اگر کاربر Private Cloud هستید، می توانید از گزارش های دسترسی NGINX برای تعیین اطلاعات کلیدی مربوط به خطاهای HTTP
431
استفاده کنید. گزارش های دسترسی NGINX را بررسی کنید:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log
جایی که: ORG ، ENV ، و PORT# با مقادیر واقعی جایگزین میشوند.
- جستجو کنید تا ببینید آیا خطاهای
431
در طول یک مدت زمان مشخص وجود دارد (اگر مشکل در گذشته اتفاق افتاده است) یا آیا درخواست هایی وجود دارد که هنوز با431
شکست خورده است. اگر هر
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 فراتر رفته است.
علت: اندازه سرصفحه درخواست بیشتر از حد مجاز است
تشخیص
- کد خطا ، منبع خطا و اندازه طول درخواست را برای خطای مشاهده شده با استفاده از مانیتورینگ API یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید.
- اگر منبع خطا دارای مقدار
apigee
یاMP
باشد، کد خطا دارایprotocol.http.TooBigHeaders
مقدار باشد.http.TooBigHeaders، و طول درخواست بیش از 25 کیلوبایت باشد، این نشان می دهد که اندازه درخواست ارسال شده توسط برنامه مشتری به Apigee بزرگتر از محدودیت مجاز در Apigee Edge . - میتوانید با استفاده از یکی از روشهای زیر تأیید کنید که اندازه سرصفحههای درخواست از حد مجاز ۲۵ کیلوبایت فراتر رفته است:
پیغام خطا
برای تأیید اعتبار با استفاده از پیام خطا:
اگر به پیام خطای کامل دریافت شده از Apigee Edge دسترسی دارید، به
faultstring
مراجعه کنید.faultstring
نشان می دهد که حجم کل سرصفحه های درخواست از حد مجاز 25 کیلوبایت فراتر رفته است.نمونه پیغام خطا:
"faultstring":"request headers size exceeding 25,600"
درخواست واقعی
برای تأیید اعتبار با استفاده از درخواست واقعی:
اگر به درخواست واقعی ارائه شده توسط برنامه مشتری دسترسی دارید، مراحل زیر را انجام دهید:
- اندازه هدرهای ارسال شده در درخواست را بررسی کنید.
اگر متوجه شدید که اندازه کل هدرها بیشتر از حد مجاز در 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 فراتر رفته است استفاده کنید.
گزارشهای پردازشگر پیام را بررسی کنید:
/opt/apigee/var/log/edge-message-processor/logs/system.log
- جستجو کنید تا ببینید آیا خطاهای
431
در طول یک مدت زمان مشخص وجود دارد (اگر مشکل در گذشته اتفاق افتاده است) یا آیا درخواست هایی وجود دارد که هنوز با431
شکست خورده است. می توانید از رشته های جستجوی زیر استفاده کنید.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- خطوطی را از
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 [توصیه میشود]: برنامه مشتری را اصلاح کنید تا سرصفحههای درخواست را با اندازه کل بیشتر از حد مجاز ارسال نکند.
- دلیل ارسال درخواست توسط مشتری خاص را با اندازه بزرگ تجزیه و تحلیل کنید که باعث می شود اندازه کل سرصفحه بیشتر از حد مجاز تعریف شده در Limits باشد.
اگر مطلوب نیست، برنامه مشتری خود را طوری تغییر دهید که سرصفحه های درخواستی با اندازه کمتر از حد مجاز ارسال کند.
در مثالی که در بالا مورد بحث قرار گرفت، میتوانید با ارسال پارامتر مقادیر هدر طولانی به عنوان بخشی از بدنه/بار درخواست، مشکل را برطرف کنید:
curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
- اگر مطلوب است و می خواهید هدر بیش از حد مجاز ارسال کنید به گزینه بعدی بروید.
CwC
گزینه شماره 2: از ویژگی CwC برای افزایش محدودیت خط درخواست استفاده کنید
Apigee یک ویژگی CwC را ارائه می دهد که به آن اجازه می دهد محدودیت اندازه خط درخواست را افزایش دهد. برای جزئیات به تنظیم محدودیت خط درخواست در پردازشگر پیام مراجعه کنید
محدودیت ها
Apigee انتظار دارد که برنامه کلاینت و سرور باطن، سرصفحههای درخواست/پاسخی را که اندازه آنها از حد مجاز بیشتر است، همانطور که برای محدودیت اندازه سرصفحه درخواست/پاسخ در Apigee Edge Limits مستند شده است، ارسال نکند.
- اگر کاربر Public Cloud هستید، حداکثر محدودیت برای اندازه سرصفحه درخواست و پاسخ همانگونه است که برای اندازه سرصفحه درخواست/پاسخ در Apigee Edge Limits مستند شده است.
- اگر کاربر Private Cloud هستید، ممکن است حداکثر حد پیشفرض برای اندازه سرصفحه درخواست و پاسخ را تغییر داده باشید (حتی اگر این یک عمل توصیهشده نیست). میتوانید حداکثر محدودیت اندازه سرصفحه درخواست را با دنبال کردن دستورالعملهای نحوه بررسی محدودیت فعلی تعیین کنید.
چگونه حد فعلی را بررسی کنیم؟
این بخش نحوه تأیید اینکه ویژگی HTTPRequest.headers.limit
با یک مقدار جدید در پردازشگرهای پیام به روز شده است را توضیح می دهد.
- در دستگاه Message Processor، ویژگی
HTTPRequest.headers.limit
را در پوشه/opt/apigee/edge-message-processor/conf
جستجو کنید و بررسی کنید که چه مقداری مطابق شکل زیر تنظیم شده است:grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
- نتیجه نمونه دستور بالا به شرح زیر است:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
در خروجی مثال بالا، توجه داشته باشید که ویژگی
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