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