أنت تعرض مستندات Apigee Edge.
انتقل إلى
مستندات Apigee X. معلومات
المشكلة
يحصل تطبيق العميل على رمز حالة HTTP 500 Internal Server Error
مع
رمز الخطأ protocol.http.BadFormData
كاستجابة لطلبات البيانات من واجهة برمجة التطبيقات.
رسالة الخطأ
يحصل تطبيق العميل على رمز الاستجابة التالي:
HTTP/1.1 500 Internal Server Error
بالإضافة إلى ذلك، قد تلاحظ رسالة الخطأ التالية:
{ "fault":{ "faultstring":"Bad Form Data", "detail":{ "errorcode":"protocol.http.BadFormData" } } }
بيانات النموذج
قبل التطرق إلى تفاصيل استكشاف هذه المشكلة وإصلاحها، دعونا نتعرف على بيانات النموذج.
بيانات النموذج هي المعلومات التي يقدمها المستخدم عادةً من خلال نموذج HTML يحتوي على عناصر مثل مربّع إدخال نص أو زر أو مربّع اختيار يتم إرسال بيانات النموذج بشكل عام كسلسلة من أزواج المفتاح/القيمة كجزء من طلبات أو استجابات HTTP.
نقل بيانات النموذج
- Content-Type: application/x-www-form-urlregistered
- إذا كان حجم بيانات النموذج صغيرًا، فسيتم إرسال البيانات كأزواج المفتاح/القيمة مع:
- يتم تشفير الأحرف في كلا المفتاحين وفقًا للقواعد الموضحة في "نماذج Google"، القسم 17.13.4.1
- العنوان
Content-Type: application/x-www-form-urlencoded
نموذج طلب مع بيانات النموذج:
curl https://HOSTALIAS/somepath -H "Content-Type: application/x-www-form-urlencoded" -d "username=abc@google.com&pasword=secret123"
- أي أحرف غير أبجدية رقمية في كل من المفاتيح والقيم هي
بنسبة مئوية معينة، وهذا يعني أنه يتم تمثيلها كأحرف ثلاثية
%HH
، يتكون من علامة نسبة مئوية متبوعة برقمين سداسيين عشريين تمثل رمز ASCII للحرف المحدد. - وبالتالي، على الرغم من أن علامة النسبة المئوية (
%
) مسموح بها في بيانات النموذج، إلا أنها ويتم تفسيرها على أنها بداية تسلسل هروب خاص. لذلك، إذا كانت بيانات النموذج تحتاج إلى تحتوي على علامة النسبة المئوية (%
) في المفتاح أو القيمة، فيجب إرسالها%25,
التي تمثل رمز ASCII لعلامة النسبة المئوية (%
) حرف.
- إذا كان حجم بيانات النموذج صغيرًا، فسيتم إرسال البيانات كأزواج المفتاح/القيمة مع:
- نوع المحتوى: Multipart/form-data
إذا أردت نقل كميات كبيرة من البيانات الثنائية أو النصوص التي تحتوي على أحرف غير ASCII ثم يمكنك إرسال البيانات باستخدام
Content-Type:
متعدد الأجزاء/form-data كما هو موضّح في "نماذج Google"، القسم 17.13.4.2
الأسباب المحتملة
يحدث هذا الخطأ فقط في حال استيفاء جميع الشروط التالية:
- يحتوي طلب HTTP الذي أرسله العميل إلى Apigee Edge على ما يلي:
Content-Type: application/x-www-form-urlencoded
،- بيانات النموذج التي تحمل علامة النسبة المئوية (
%
) أو علامة النسبة المئوية (%
) متبوعة بأحرف سداسية عشرية غير صالحة غير مسموح بها وفقًا "نماذج Google"، الفقرة 17.13.4.1.
يقرأ خادم وكيل واجهة برمجة التطبيقات في Apigee Edge معلمات النموذج المحددة التي تحتوي على أي أحرف. غير المسموح لها باستخدامها في تدفق الطلب من خلال استخراج المتغيّرات أو سياسة assignMessage.
على سبيل المثال، إذا كانت بيانات النموذج تحتوي على علامة النسبة المئوية (
%
) كما هي (بدون ترميز) أو علامة النسبة المئوية (%
) متبوعة بأي تنسيق سداسي عشري غير صالح حرفًا في المفتاح و/أو القيمة، فستحصل على هذا الخطأ.في ما يلي الأسباب المحتملة لحدوث هذا الخطأ:
السبب الوصف إرشادات استكشاف الأخطاء وإصلاحها التي تنطبق على تحتوي معلَمات النماذج في الطلب على أحرف غير مسموح بها تحتوي معلمات النموذج التي يتم تمريرها كجزء من طلب HTTP من قبل العميل على أي الأحرف التي غير مسموح باستخدامها. مستخدمو Edge Public و Private Cloud
خطوات التشخيص الشائعة
استخدِم إحدى الأدوات/الأساليب التالية لتشخيص هذا الخطأ:
مراقبة واجهة برمجة التطبيقات
لتشخيص الخطأ باستخدام مراقبة واجهة برمجة التطبيقات:
- سجِّل الدخول إلى واجهة مستخدم Apigee Edge كمستخدم من خلال الدور المناسب.
انتقِل إلى المؤسسة التي تريد التحقيق في المشكلة فيها.
- انتقل إلى تحليل > مراقبة واجهة برمجة التطبيقات > التحقيق
- اختَر الفترة الزمنية المحدّدة التي لاحظت فيها الأخطاء.
ارسم رمز الخطأ مقابل الوقت.
اختَر خلية تتضمّن رمز الخطأ
protocol.http.BadFormData
باعتباره كما هو موضح أدناه:المعلومات عن رمز الخطأ
protocol.http.BadFormData
هي كما هو موضح أدناه:انقر على عرض السجلات ووسِّع صف الطلب الذي تعذّر تنفيذه.
- من نافذة السجلات، يُرجى ملاحظة التفاصيل التالية:
- رمز الحالة:
500
- مصدر الخطأ:
proxy
- رمز الخطأ:
protocol.http.BadFormData
- سياسة الأخطاء:
extractvariables/EV-ExtractFormParams
- رمز الحالة:
- إذا كان مصدر الخطأ هو
proxy
، سيتم ضبط رمز الخطأ علىprotocol.http.BadFormData
وسياسة الأخطاء غير فارغتين، ثم إلى حدوث الخطأ أثناء تنفيذ السياسة المحددة المشار إليها في قسم خطأ السياسة هي قراءة أو استخراج بيانات النموذج (معلَمات النموذج) التي تحتوي على أي الأحرف التي غير مسموح باستخدامها. - في هذا المثال، تكون X-Apigee-fault-policy هي X-Apigee-fault-policy، ما يعني أنّ سياسة استخراج المتغيّرات هي تعذّر استخدام EV-ExtractFormParams أثناء قراءة النموذج أو استخراجه. المعلَمات.
أداة التتبُّع
لتشخيص الخطأ باستخدام أداة التتبُّع:
- تفعيل جلسة التتبُّع
وإمّا:
- انتظِر إلى أن يحدث الخطأ
500 Internal Server Error
. - إذا كان يمكنك إعادة إنتاج المشكلة، يُرجى طلب بيانات من واجهة برمجة التطبيقات لإعادة إنتاج المشكلة.
500 Internal Server Error
- انتظِر إلى أن يحدث الخطأ
تأكَّد من تفعيل عرض كل FlowInfos:
- اختَر أحد الطلبات التي تعذّر تنفيذها وافحص عملية التتبُّع.
- يمكنك التنقّل خلال مراحل عملية التتبُّع المختلفة وتحديد موضع التعذُّر حدث.
سيظهر الخطأ عادةً في إحدى السياسات كما هو موضح أدناه:
في نموذج التتبُّع أعلاه، لاحظ أنّ الخطأ حدث في سياسة استخراج المتغيّرات المُسماة "
EV-ExtractFormParams
"انتقِل إلى المسار المُسمَّى الخطأ بعد السياسة المحدّدة التي تعذّر تنفيذ الإجراء بها:
- دوِّن قيم ما يلي من عملية التتبُّع:
الخطأ:
Bad Form Data
الولاية:
PROXY_REQ_FLOW
error.class:
com.apigee.rest.framework.BadRequestException
- تشير قيمة الخطأ
Bad Form Data
إلى أن النموذج تحتوي المعلمات على بعض الأحرف غير المسموح باستخدامها. - تشير قيمة الدولة
PROXY_REQ_FLOW,
إلى أن حدث الخطأ في تدفق الطلب للخادم الوكيل لواجهة برمجة التطبيقات.
- تشير قيمة الخطأ
- انتقِل إلى مرحلة AX (البيانات المسجَّلة في "إحصاءات Google") في عملية التتبُّع والنقر. بها.
مرِّر لأسفل إلى قسم تفاصيل المرحلة - عناوين الخطأ تحديد قيم X-Apigee-fault-code وX-Apigee-fault-code، وX-Apigee-fault-policy كما هو موضح أدناه:
تجدر الإشارة إلى أنّ قيمتَي X-Apigee-fault-code وX-Apigee-error-source هما
protocol.http.BadFormData
وpolicy
على التوالي. وX-Apigee-fault-policy غير فارغة. يشير هذا إلى أن الخطأ حدثت بينما كانت السياسة المحدّدة المشار إليها في X-Apigee-fault-policy قراءة أو استخراج بيانات النموذج (معلمات النموذج)، والتي تحتوي على أي أحرف غير مسموح لها باستخدامها.عناوين الردود القيمة X-Apigee-fault-code protocol.http.BadFormData
X-Apigee-fault-source policy
X-Apigee-fault-policy extractvariables/EV-ExtractFormParams
- في هذا المثال، تكون X-Apigee-fault-policy هي
extractvariables/EV- ExtractFormParams,
، ما يعني أنّ سياسة PermissionVariables تم تحديد اسم تعذّرEV-ExtractFormParams
أثناء قراءة النموذج أو استخراجه. المعلَمات.
NGINX
لتشخيص الخطأ باستخدام سجلات وصول NGINX:
- إذا كنت مستخدمًا للسحابة الإلكترونية الخاص، يمكنك استخدام سجلات وصول NGINX لإجراء ما يلي:
لتحديد المعلومات الأساسية حول HTTP
500 Internal Server Error
. تحقق من سجلات وصول NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- البحث لمعرفة ما إذا كان هناك أي أخطاء
500
مع رمز الخطأprotocol.http.BadFormData
خلال مدة محددة (إذا كانت المشكلة في الماضي) أو إذا كانت هناك أي طلبات لا تزال تخفق مع500
إذا ظهرت أي أخطاء
500
في X-Apigee-fault-code تتطابق مع قيمةprotocol.http.BadFormData
، ثم تحديد قيمة X-Apigee-fault-source X-Apigee-fault-policy.نموذج الخطأ 500 من سجلّ وصول NGINX:
يتضمن إدخال النموذج أعلاه من سجل وصول NGINX القيم التالية X-Apigee-fault-code وX-Apigee-fault-code
العناوين القيمة X-Apigee-fault-code protocol.http.BadFormData
X-Apigee-fault-source policy
X-Apigee-fault-policy extractvariables/EV-ExtractFormParams
- تجدر الإشارة إلى أنّ قيم X-Apigee-fault-code وX-Apigee-fault-code
protocol.http.BadFormData
،policy
على التوالي وX-Apigee-fault-policy غير فارغة. يشير هذا إلى أن الخطأ حدثت بينما كانت السياسة المحددة المشار إليها في X-Apigee-fault-policy, قراءة أو استخراج بيانات النموذج (معلمات النموذج)، والتي تحتوي على أي أحرف غير مسموح لها باستخدامها. - في هذا المثال، تكون X-Apigee-fault-policy هي
extractvariables/EV- ExtractFormParams,
، ما يعني أنّ سياسة PermissionVariables تم تحديد اسم تعذّر تنفيذ الإجراءEV-ExtractFormParams
أثناء قراءة النموذج. المعلَمات.
السبب: تحتوي معلمات النموذج في الطلب على أحرف غير مسموح بها
التشخيص
- حدِّد رمز الخطأ ومصدر الخطأ وسياسة الأخطاء لنظام
500 Internal Server Error
باستخدام سجلّات الوصول إلى NGINX أو أداة مراقبة واجهة برمجة التطبيقات أو أداة التتبُّع على النحو الموضَّح. في خطوات التشخيص الشائعة. - إذا كان رمز الخطأ هو
protocol.http.BadFormData
، فإن مصدر الخطأ قيمةproxy
أوpolicy
، ولا تنطبق سياسة الأخطاء على فارغة, فإن هذا يشير إلى فشل السياسة المحددة في , أثناء قراءة أو استخراج بيانات النموذج (معلمات النموذج). - راجِع السياسة المُشار إليها في سياسة الأخطاء وحدِّد ما يلي:
المعلومات:
- المصدر: يجب تحديد ما إذا كانت السياسة تقرأ البيانات أو تستخرج منها. الطلب أو الاستجابة.
- مَعلمات النموذج: حدِّد مَعلمات النموذج المعيّنة التي تتم قراءتها في
.
النموذج رقم 1
النموذج 1: استخراج المتغيّرات في سياسة استخراج مَعلمات النموذج:
<ExtractVariables name="EV-ExtractFormParms"> <DisplayName>EV-ExtractFormParams</DisplayName> <Source>request</Source> <FormParam name="username"> <Pattern ignoreCase="false">{username}</Pattern> </FormParam> <FormParam name="password"> <Pattern ignoreCase="false">{password}</Pattern> </FormParam> <VariablePrefix>forminfo</VariablePrefix> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </ExtractVariables>
في سياسة "المتغيّرات" المذكورة أعلاه:
المصدر:
request
يُشار إلى ذلك من خلال العنصر
<Source>
مَعلمات النموذج:
username
وpassword
ويُشار إلى ذلك من خلال العنصر
<Pattern>
داخل العنصر<FormParam>
ويشير ذلك إلى أنّ مَعلمتَي النموذج
username
و/أو تم تمريرpassword
كجزء من طلب HTTP من قِبل العميل إلى يحتوي Apigee Edge على أحرف غير مسموح بها.النموذج رقم 2
النموذج 2: سياسة AssignMessage التي تنسخ مَعلمات النموذج:
<AssignMessage continueOnError="false" enabled="true" name="AM-CopyFormParams"> <Copy source="request"> <FormParams> <FormParam name="username"/> <FormParam name="password"/> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
في سياسة "المتغيّرات" المذكورة أعلاه:
المصدر:
request
ويُشار إلى ذلك من خلال السمة
source
في العنصر<Copy>
مَعلمات النموذج:
username
وpassword
ويُشار إلى ذلك من خلال السمة
name
في العنصر<FormParam>
ويشير ذلك إلى أنّ مَعلمتَي النموذج
username
أوpassword
أو وكلاهما الذي يتم تمريره كجزء من طلب HTTP من قِبل العميل إلى Apigee Edge يحتوي على أي الأحرف التي غير مسموح باستخدامها.
تحقَّق ممّا إذا كانت هناك أي أحرف غير مسموح بها الأحرف المستخدمة في المعلَمات المحدّدة في الخطوة 3 باستخدام إحدى الطرق التالية:
أداة التتبُّع
للتحقّق من الصحة باستخدام أداة التتبُّع:
- في حال سجّلت تتبُّع الطلب الذي تعذّر إكماله كما هو موضّح في خطوات التشخيص الشائعة، ثم اختَر إحدى الطلبات التي أخفقت.
- إذا كنت قد حددت أن معلمات النموذج تحتوي على أي أحرف
التي غير مسموح باستخدامها تشكل جزءًا من طلب HTTP في
الخطوة 3 أعلاه، ثم
- انتقِل إلى المرحلة تم استلام الطلب من العميل.
مرِّر لأسفل وصولاً إلى قسم تفاصيل المرحلة وراجِع طلب المحتوى:
- في المثال أعلاه، لاحِظ أنّ معلَمة النموذج
password
يحتوي على علامة النسبة المئوية (%
). - نظرًا لاستخدام علامة النسبة المئوية (
%
) أيضًا في ترميز النسبة المئوية الأحرف الخاصة، فلا يمكن استخدامه كما هو في بيانات النموذج. - وبالتالي، تستجيب Apigee Edge باستخدام
500 Internal Server Error
يتضمن رمز الخطأprotocol.http.BadFormData
طلب فعلي
للتحقّق من الصحة باستخدام الطلب الفعلي:
- إذا لم يكن بإمكانك الوصول إلى الطلب الفعلي الذي تم تقديمه إلى الخادم الهدف، ثم انتقل إلى درجة الدقة.
- إذا كان بإمكانك الوصول إلى الطلب الفعلي الذي تم تقديمه إلى Apigee Edge، يمكنك تنفيذ
الخطوات التالية:
- يمكنك مراجعة محتوى بيانات النموذج ومعرفة ما إذا كان يحتوي على أي أحرف
غير مسموح باستخدامها مثل علامة النسبة المئوية (
%
) أو علامة النسبة المئوية (%
) متبوعة بعلامة غير صالحة سداسية عشرية.النموذج رقم 1
نموذج الطلب رقم 1: نموذج البيانات كجزء من الطلب
curl -X GET "https://HOSTALIAS/myproxy -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=123456abc123&client_secret=c23578%ZY"
في هذا المثال، يُرجى العِلم أنّ العنصر
client_secret
يحتوي على علامة النسبة المئوية (%
) متبوعة أحرف سداسية عشرية غير صالحةZY
.النموذج رقم 2
نموذج الطلب رقم 2: تمرير بيانات النموذج في ملف:
curl -X GET "https://HOSTALIAS/myproxy -H "Content-Type: application/x-www-form-urlencoded" -d @form_data.xml
محتويات form_data.xml:
xml=<user><username>abc1234@google.com</username><password>qwerty12345!@#$%</password></user>
في هذا المثال، يُرجى ملاحظة أنّ العنصر
password
يحتوي على علامة النسبة المئوية (%
)، والتي لا ينبغي تمريرها كما هي في بيانات النموذج.
- يمكنك مراجعة محتوى بيانات النموذج ومعرفة ما إذا كان يحتوي على أي أحرف
غير مسموح باستخدامها مثل علامة النسبة المئوية (
- في المثالين أعلاه، بيانات النموذج المرسلة كجزء من طلب HTTP إلى يحتوي Apigee Edge على أحرف غير مسموح باستخدامها.
- لذلك، تستجيب Apigee Edge باستخدام
500 Internal Server Error
. برمز الخطأprotocol.http.BadFormData
.
الدقة
- تأكد من أن أي رموز خاصة في كل من المفاتيح والقيم الخاصة ببيانات النموذج أو المعلمات التي يرسلها العميل دائمًا كجزء من طلب HTTP كما هو موضح في بيانات النموذج - application/x-www-form-urlized.
- في الأمثلة التي تمت مناقشتها أعلاه، يمكنك حلّ المشاكل على النحو التالي:
النموذج رقم 1
النموذج 1: تمرير بيانات النموذج كجزء من الطلب:
استخدم صالحة الأحرف السداسية العشرية التي تتطابق مع رمز ASCII لحرف معيّن. على سبيل المثال، إذا كنت تريد إرسال علامة الدولار (
$
)، استخدِم%24
. كما هو موضح أدناه:curl -X GET "https://HOSTALIAS/myproxy -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=123456abc123&client_secret=c23578%24"
النموذج رقم 2
نموذج الطلب رقم 2: تمرير بيانات النموذج في ملف:
curl -X GET "https://HOSTALIAS/myproxy -H "Content-Type: application/x-www-form-urlencoded" -d @form_data.xml
محتويات form_data.xml:
يمكنك استخدام %-encoding لعلامة النسبة المئوية (
%
)، التي يتم تعديل الملف إلى%25
كما هو موضّح أدناه:xml=<user><username>abc1234@google.com</username><password>qwerty12345!!@#$%25</password></user>
المواصفات
تتوقع Apigee Edge أن يتم إرسال بيانات النموذج وفقًا للمواصفات التالية:
المواصفات |
---|
بيانات النموذج - application/x-www-form-urlregistered |
في حال استمرارك في الحصول على أي مساعدة من Apigee، يُرجى الانتقال إلى يجب جمع المعلومات. بيانات التشخيص.
يجب جمع معلومات التشخيص
في حال استمرار المشكلة حتى بعد اتّباع التعليمات أعلاه، يُرجى جمع ما يلي معلومات التشخيص، ثم التواصل مع فريق دعم Apigee Edge:
إذا كنت من مستخدمي Cloud Public، يُرجى تقديم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم الخادم الوكيل لواجهة برمجة التطبيقات
- إكمال الأمر
curl
المُستخدَم لإعادة إنتاج500 Internal Server Error
مع رمز الخطأprotocol.http.BadFormData
- ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات
إذا كنت مستخدمًا للسحابة الإلكترونية الخاصة، قدِّم المعلومات التالية:
- ظهور رسالة خطأ كاملة للطلبات التي تعذّر تنفيذها
- اسم البيئة
- حزمة الخادم الوكيل لواجهة برمجة التطبيقات
- ملف تتبُّع طلبات البيانات من واجهة برمجة التطبيقات
سجلات وصول 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