شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
علامت
برنامه سرویس گیرنده یک کد وضعیت HTTP 400 Bad Request
با protocol.http.DuplicateHeader
کد خطا دریافت می کند.http.DuplicateHeader به عنوان پاسخی برای تماس های API.
پیغام خطا
برنامه مشتری کد پاسخ زیر را دریافت می کند:
HTTP/1.1 400 Bad Request
علاوه بر این، ممکن است پیغام خطایی مشابه تصویر زیر مشاهده کنید:
{ "fault":{ "faultstring":"Duplicate Header \"Expires\"", "detail":{ "errorcode":"protocol.http.DuplicateHeader" } } }
علل احتمالی
این خطا در صورتی رخ می دهد که یک هدر HTTP خاص که مجاز به داشتن موارد تکراری در Apigee Edge نیست، بیش از یک بار با مقادیر مشابه یا متفاوت به عنوان بخشی از درخواست HTTP ارسال شده توسط مشتری به Apigee Edge ظاهر شود.
طبق RFC 7230، بخش 3.2.2: ترتیب فیلدها ، یک فرستنده نباید چندین فیلد سرصفحه با نام فیلد یکسان در یک پیام ایجاد کند، مگر اینکه کل مقدار فیلد برای آن فیلد سرصفحه به عنوان یک لیست جدا شده با کاما تعریف شده باشد، [یعنی ، #(مقدار)] یا فیلد هدر یک استثنا شناخته شده است. اگر Apigee Edge بیش از یک بار در درخواست HTTP ارسال شده توسط کلاینت هدر خاصی را پیدا کند که مجاز به داشتن موارد تکراری نیست، سپس با 400 Bad Request
و protocol.http.DuplicateHeader
کد خطا پاسخ می دهد.http.DuplicateHeader .
در اینجا دلایل احتمالی این خطا وجود دارد:
علت | توضیحات | دستورالعمل های عیب یابی قابل اجرا برای |
---|---|---|
هدر تکراری در درخواست | درخواست HTTP از برنامه مشتری به Apigee حاوی هدرهای تکراری است. | کاربران Edge Public و Private Cloud |
مراحل تشخیص رایج
برای تشخیص این خطا از یکی از ابزارها/تکنیک های زیر استفاده کنید:
مانیتورینگ API
برای تشخیص خطا با استفاده از API Monitoring:
- به عنوان کاربر با نقش مناسب وارد رابط کاربری Apigee Edge شوید .
به سازمانی که میخواهید در آن موضوع را بررسی کنید بروید.
- به صفحه Analyze > API Monitoring > Investigate بروید.
- بازه زمانی خاصی را که در آن خطاها را مشاهده کرده اید انتخاب کنید.
- مطمئن شوید که فیلتر پروکسی روی همه تنظیم شده باشد.
- کد خطا را در برابر زمان ترسیم کنید.
مطابق شکل زیر سلولی را انتخاب کنید که دارای
protocol.http.DuplicateHeader
کد خطا باشد.http.DuplicateHeader:اطلاعات مربوط به
protocol.http.DuplicateHeader
کد خطا.http.DuplicateHeader مطابق شکل زیر نمایش داده می شود:- روی View logs کلیک کنید و ردیف درخواست ناموفق را گسترش دهید.
- از پنجره Logs به جزئیات زیر توجه کنید:
- کد وضعیت:
400
- منبع خطا:
apigee
- کد خطا:
protocol.http.DuplicateHeader
.
- کد وضعیت:
- اگر منبع خطا دارای مقدار
apigee
یاMP
باشدMP
و کد خطا دارایprotocol.http.DuplicateHeader
مقدار است.http.DuplicateHeader است، سپس این نشان می دهد که درخواست HTTP از مشتری حاوی هدرهای تکراری است.
ابزار ردیابی
NGINX
برای تشخیص خطا با استفاده از گزارش های دسترسی NGINX:
- اگر کاربر Private Cloud هستید، می توانید از گزارش های دسترسی NGINX برای تعیین اطلاعات کلیدی مربوط به خطاهای HTTP
400
استفاده کنید. گزارش های دسترسی NGINX را بررسی کنید:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ ENV . PORT# _access_log
جایی که: ORG ، ENV و PORT# با مقادیر واقعی جایگزین میشوند.
- جستجو کنید تا ببینید آیا
400
خطا در طول یک مدت زمان مشخص وجود دارد (اگر مشکل در گذشته رخ داده است) یا آیا درخواست هایی وجود دارد که با400
شکست خورده اند. اگر هر
400
خطا با کد X-Apigee-fault-code مطابق با مقدارprotocol.http.DuplicateHeader
پیدا کردید، سپس مقدار X-Apigee-fault-source را تعیین کنید.نمونه خطای 400 از گزارش دسترسی NGINX:
ورودی نمونه بالا از گزارش دسترسی NGINX دارای مقادیر زیر برای X-Apigee-fault-code و X-Apigee-fault-source است:
سرصفحه های پاسخ ارزش X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source MP
علت: تکرار هدر در درخواست
تشخیص
- کد خطا و منبع خطا را برای خطای مشاهده شده با استفاده از مانیتورینگ API یا گزارش های دسترسی NGINX همانطور که در مراحل تشخیص رایج توضیح داده شده است، تعیین کنید.
- اگر منبع خطا دارای مقدار
apigee
یاMP
باشد، این نشان می دهد که درخواست ارسال شده توسط برنامه مشتری به Apigee حاوی هدرهای تکراری است. با استفاده از یکی از روش های زیر می توانید هدر واقعی را که بیش از یک بار به عنوان بخشی از درخواست ارسال می شود تعیین کنید:
پیغام خطا
با استفاده از پیغام خطا
اگر به پیام خطای کامل دریافت شده از Apigee Edge دسترسی دارید، به
faultstring
مراجعه کنید.faultstring
شامل نام هدر است که بیش از یک بار ارسال شده است.نمونه پیغام خطا:
"faultstring":"Duplicate Header \"Expires\""
- در پیغام خطای بالا می بینید که هدر
Expires
بیش از یک بار همانطور که درfaultstring
مشاهده می شود ارسال می شود.
درخواست واقعی
با استفاده از درخواست واقعی
اگر به درخواست واقعی ارائه شده توسط برنامه مشتری دسترسی دارید، مراحل زیر را انجام دهید:
- لیست سرصفحه های ارسال شده در درخواست را تأیید کنید.
- اگر متوجه شدید که یک هدر خاص بیش از یک بار در درخواست با مقدار یکسان یا مقادیر متفاوت ظاهر می شود، دلیل این خطا همین است.
نمونه درخواست:
curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT" -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
در درخواست مثال بالا، هدر
Expires
بیش از یک بار ارسال می شود. بنابراین، این درخواست با خطای400 Bad Request
و کد خطا:protocol.http.DuplicateHeader
با شکست مواجه می شود.- از طرف دیگر، اگر به گزارشهای مشتری دسترسی دارید، میتوانید ببینید که آیا اطلاعاتی در مورد درخواست واقعی ارائه شده به Apigee Edge دارید یا خیر و هدری را که بیش از یک بار ارسال میشود تعیین کنید.
قطعنامه
رفع کپی برداری
گزینه شماره 1 [گزینه پیشنهادی] برنامه سرویس گیرنده را طوری اصلاح کنید که شامل سرصفحه های تکراری نباشد
- دلیل ارسال یک هدر تکراری توسط مشتری خاص را تجزیه و تحلیل کنید. به عنوان مثال، در مورد بالا
Expires
. بررسی کنید که پروکسیهای API هدر تکراری را بپذیرند. به طور معمول، مطابق با مشخصات HTTP RFC7230 مطلوب نیست. - اگر مطلوب نیست، برنامه مشتری خود را طوری تغییر دهید که هدرهای تکراری ارسال نشود.
در مثالی که در بالا مورد بحث قرار گرفت، مشاهده شد که هدر
Expires
دو بار با همان مقدار ارسال می شود که مطلوب نیست. همانطور که در زیر نشان داده شده است، می توانید مشکل را با عبور از سربرگExpires
فقط یک بار برطرف کنید:curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
- اگر مطلوب است و میخواهید هدرهای تکراری را مجاز کنید، به گزینه شماره 2 با استفاده از ویژگی CwC بروید.
CwC
گزینه شماره 2 با استفاده از ویژگی CwC
Apigee یک ویژگی CwC HTTPHeader.<HeaderName>
، که به برنامههای کلاینت و سرورهای هدف اجازه میدهد تا هدرهای تکراری را به پراکسیهای API در Apigee Edge ارسال کنند.
دارایی CwC | ارزش ها |
---|---|
HTTPHeader.<HeaderName> | allowDuplicates,multivalued |
به عنوان مثال، ویژگی زیر را میتوان روی Message Processors تنظیم کرد تا مقادیر تکراری و چندگانه برای سرصفحه Expires
مجاز باشد.
HTTPHeader.Expires=allowDuplicates, multiValued
- اگر کاربر Private Cloud هستید، میتوانید ویژگی را به گونهای پیکربندی کنید که Apigee Edge از ایجاد خطای
400 Bad Request
جلوگیری کند، حتی اگر درخواست حاوی سرصفحههای تکراری با استفاده از پیکربندی پردازشگرهای پیام برای استفاده از راهنمای نحوه استفاده از هدرهای تکراری باشد . - اگر کاربر Public Cloud هستید، با پشتیبانی Apigee Edge تماس بگیرید تا این ویژگی را برای سازمان خود پیکربندی کنید.
مشخصات
Apigee از برنامه مشتری انتظار دارد که هدرهای تکراری را به عنوان بخشی از درخواست مطابق با مشخصات RFC زیر ارسال نکند:
مشخصات |
---|
RFC 7230، بخش 3.2.2: ترتیب میدانی |
RFC 7230، بخش 3.2 فیلدهای سرصفحه |
اگر همچنان به کمک پشتیبانی Apigee نیاز دارید، به Must collect information diagnostic بروید.
باید اطلاعات تشخیصی را جمع آوری کرد
اطلاعات تشخیصی زیر را جمع آوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید.
اگر کاربر Public Cloud هستید، اطلاعات زیر را ارائه دهید:
- نام سازمان
- نام محیط زیست
- نام پروکسی API
- دستور کامل
curl
که برای بازتولید خطای400
استفاده می شود - فایل ردیابی برای درخواست های API
اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:
- پیام خطای کامل برای درخواست های ناموفق مشاهده شد
- نام محیط زیست
- بسته پروکسی API
- دستور
curl
را که برای بازتولید خطای400
استفاده کردید کامل کنید - فایل ردیابی برای درخواست های API
گزارش های دسترسی 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