أنت بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلىمستندات Apigee X. info
المشكلة
يتلقّى تطبيق العميل استجابة HTTP 400 Bad Request مع الرسالة
The plain HTTP request was sent to HTTPS port.
رسالة الخطأ
يتلقّى تطبيق العميل رمز الاستجابة التالي:
HTTP/1.1 400 Bad Request
يلي ذلك صفحة الخطأ بتنسيق HTML أدناه:
<html> <head><title>400 The plain HTTP request was sent to HTTPS port</title></head> <body> <center><h1>400 Bad Request</h1></center> <center>The plain HTTP request was sent to HTTPS port</center> </body> </html>
الأسباب المحتملة
| السبب | الوصف | تعليمات تحديد المشاكل وحلّها التي تنطبق على |
|---|---|---|
| طلب HTTP إلى مضيف افتراضي تم ضبطه لاستخدام بروتوكول أمان طبقة النقل (TLS) | يرسل العميل طلب HTTP إلى مضيف افتراضي تم ضبطه لاستخدام بروتوكول أمان طبقة النقل (TLS) | مستخدمو السحابة الإلكترونية العامة والخاصة في Edge |
| طلب HTTP إلى نقطة نهاية مستهدَفة تم ضبطها لاستخدام بروتوكول أمان طبقة النقل (TLS) | تم إرسال طلب HTTP إلى خادم الخلفية الذي تم تفعيل بروتوكول أمان طبقة النقل (TLS) فيه في نقطة النهاية المستهدَفة. | مستخدمو السحابة الإلكترونية العامة والخاصة في Edge |
| إعدادات خادم مستهدَف غير صحيحة | تم ضبط الخادم المستهدَف باستخدام المنفذ الآمن 443 ولكن لم يتم تفعيل طبقة المقابس الآمنة. |
مستخدمو السحابة الإلكترونية العامة والخاصة في Edge |
السبب: طلب HTTP إلى مضيف افتراضي تم ضبطه لاستخدام بروتوكول أمان طبقة النقل (TLS)
يحدث هذا الخطأ عندما يحاول أحد العملاء الاتصال بواجهة برمجة تطبيقات على Apigee، ويتم ضبط المضيف الافتراضي المذكور لاستخدام طبقة المقابس الآمنة، ويتلقّى طلب HTTP بدلاً من ذلك.
التشخيص
بما أنّ هذه المشكلة تحدث على نقطة النهاية المتجهة إلى الشمال وتفشل طلبات واجهة برمجة التطبيقات عند نقطة تفاعل الدخول بين تطبيق العميل والموجّه، لا يتم تسجيل رسائل الخطأ هذه في سجلّات الوصول إلى موجّه NGINX. لذلك، لن يتم تسجيل هذه الطلبات في أدوات مثل "مراقبة واجهة برمجة التطبيقات" و أداة "التتبُّع".
-
تحقَّق من طلب واجهة برمجة التطبيقات واعرف ما إذا كنت تُرسل طلب HTTP لاسم مستضيف تم ضبطه لقبول الطلبات على المنفذ الآمن
443فقط. إذا كان الأمر كذلك، فهذا هو سبب المشكلة.مثال على طلب غير صحيح لواجهة برمجة التطبيقات:
curl http://org-test.apigee.net:443/400-demo
<html> <head><title>400 The plain HTTP request was sent to HTTPS port</title></head> <body> <center><h1>400 Bad Request</h1></center> <center>The plain HTTP request was sent to HTTPS port</center> <hr><center>server</center> </body> </html>
- في طلب المثال أعلاه، يُرجى العِلم أنّه يتم إرسال طلب HTTP إلى اسم المضيف
myorg-test.apigee.netعلى المنفذ الآمن443. وهذا هو سبب الخطأ400 Bad Request.
الدقة
عليك التحقّق مما إذا كان العميل يستخدم HTTP بدلاً من HTTPS وإرسال الطلب الصحيح كما هو موضّح أدناه:
مثال على طلب بيانات من واجهة برمجة التطبيقات:
curl https://org-test.apigee.net:443/400-demo
أو
curl https://org-test.apigee.net/400-demo
< HTTP/1.1 200 OK < Date: Thu, 25 Feb 2021 13:01:43 GMT < Content-Type: text/xml;charset=UTF-8 < Content-Length: 403 < Connection: keep-alive < Server: gunicorn/19.9.0 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true
السبب: طلب HTTP إلى نقطة نهاية مستهدَفة تم ضبطها لاستخدام بروتوكول أمان طبقة النقل (TLS)
يحدث هذا الخطأ إذا ضبطت بشكلٍ غير صحيح طلبات HTTP إلى خادم الخلفية الذي تم تفعيل بروتوكول أمان طبقة النقل (TLS) فيه في نقطة النهاية المستهدَفة لخادم وكيل واجهة برمجة التطبيقات.
التشخيص
اتّبِع الخطوات التالية لتشخيص الخطأ باستخدام أداة "التتبُّع":
- فعِّل التتبُّع في واجهة مستخدم Apigee لخادم وكيل واجهة برمجة التطبيقات المتأثر.
- أرسِل طلبات إلى خادم وكيل واجهة برمجة التطبيقات.
- اختَر أحد طلبات واجهة برمجة التطبيقات التي تعذّر تنفيذها مع رمز الاستجابة
400. - انتقِل خلال المراحل المختلفة وحدِّد مكان حدوث الخطأ.
-
عادةً ما ستظهر لك استجابة الخطأ
400الواردة من خادم الخلفية. أي ستظهر لك استجابة الخطأ400في مرحلة Response received from target server (تم تلقّي الاستجابة من الخادم المستهدَف) كما هو موضّح أدناه:
-
حدِّد نقطة النهاية المستهدَفة التي تم إرسال الطلب إليها من خلال النقر على رمز AX (تم تسجيل بيانات الإحصاءات) في التتبُّع.

- دوِّن target.url الذي يحتوي على البروتوكول واسم المضيف لخادم الخلفية،
ورقم المنفذ في بعض الأحيان. المنفذ المستخدَم لـ
عنوان URL المستهدَف هو
443، ولكن البروتوكول هو HTTP. - راجِع تعريف نقطة النهاية المستهدَفة لفهم الإعدادات.
-
تأكَّد من أنّ اسم المضيف لخادم الخلفية آمن ويستمع على منفذ آمن مثل
443. إذا كنت تستخدم البروتوكولhttpفي العنصر<URL>، فهذا هو سبب هذه المشكلة.مثال على إعداد نقطة نهاية مستهدَفة:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <TargetEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <Flows/> <HTTPTargetConnection> <Properties/> <URL>http://somehost.org:443/get</URL> </HTTPTargetConnection> </TargetEndpoint>يوضّح المثال أعلاه أنّك تستخدم بروتوكول HTTP، ولكن المنفذ المستخدَم هو المنفذ الآمن
443. يؤدي ذلك إلى استجابة خادم الخلفية بالخطأ400 Bad Requestورسالة الخطأThe plain HTTP request was sent to HTTPS port.
الدقة
-
إذا كان خادم الخلفية آمنًا أو تم ضبطه لاستخدام بروتوكول أمان طبقة النقل (TLS)، تأكَّد من استخدام البروتوكول كـ
httpsفي العنصر<URL>لنقطة النهاية المستهدَفة كما هو موضّح في المثال التالي:مثال على إعداد نقطة نهاية مستهدَفة:
<HTTPTargetConnection> <Properties/> <URL>https://somehost.org:443/get</URL> </HTTPTargetConnection> -
إذا كان خادم الخلفية غير آمن، يُرجى اتّباع ما يلي:
- لا تذكر رقم المنفذ الآمن مثل
443. - ليس عليك ذكر رقم المنفذ على الإطلاق إذا كان خادم الخلفية يستمع على منفذ عادي غير آمن
- اذكر رقم المنفذ إذا كنت تستخدم أي منفذ آخر غير آمن، مثلاً:
9080
مثال على إعداد نقطة نهاية مستهدَفة:
<HTTPTargetConnection> <Properties/> <URL>http://somehost.org/get</URL> </HTTPTargetConnection> or <HTTPTargetConnection> <Properties/> <URL>http://somehost.org:9080/get</URL> </HTTPTargetConnection> - لا تذكر رقم المنفذ الآمن مثل
السبب: إعدادات خادم مستهدَف غير صحيحة
إذا تم ضبط الخادم المستهدَف باستخدام منفذ آمن مثل 443 بدون تفعيل
طبقة المقابس الآمنة، يؤدي ذلك إلى إرسال "معالج الرسائل" في Apigee Edge طلبات HTTP إلى خادم مستهدَف آمن أو
تم ضبطه لاستخدام بروتوكول أمان طبقة النقل (TLS)، ما يؤدي إلى حدوث هذه المشكلة.
التشخيص
اتّبِع الخطوات التالية لتشخيص الخطأ باستخدام أداة "التتبُّع":
- فعِّل التتبُّع في واجهة مستخدم Apigee لخادم وكيل واجهة برمجة التطبيقات المتأثر.
- أرسِل طلبات إلى خادم وكيل واجهة برمجة التطبيقات.
- اختَر أحد طلبات واجهة برمجة التطبيقات التي تعذّر تنفيذها مع رمز الاستجابة
400. - انتقِل خلال المراحل المختلفة وحدِّد مكان حدوث الخطأ.
-
عادةً ما ستظهر لك استجابة الخطأ
400الواردة من خادم الخلفية. أي ستظهر لك استجابة الخطأ400في مرحلة Response received from target server (تم تلقّي الاستجابة من الخادم المستهدَف) كما هو موضّح أدناه:
-
حدِّد نقطة النهاية المستهدَفة التي تم إرسال الطلب إليها من خلال النقر على رمز AX (تم تسجيل بيانات الإحصاءات) في التتبُّع.

-
دوِّن target.name الذي يمثّل اسم نقطة النهاية المستهدَفة.
في ملف التتبُّع للمثال أعلاه، target.name هو default. يشير ذلك إلى أنّ نقطة النهاية المستهدَفة المستخدَمة لهذا الطلب هي نقطة النهاية التلقائية.
-
راجِع تعريف نقطة النهاية المستهدَفة لفهم الإعدادات.
مثال على إعداد نقطة نهاية مستهدَفة:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <TargetEndpoint name="default"> <Description/> <FaultRules/> <PreFlow name="PreFlow"> <Request/> <Response/> </PreFlow> <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <Flows/> <HTTPTargetConnection> <Properties/> <LoadBalancer> <Server name="faulty-target"/> </LoadBalancer> </HTTPTargetConnection> </TargetEndpoint>يوضّح المثال أعلاه لإعداد نقطة نهاية مستهدَفة أنّك تستخدم خادمًا مستهدَفًا باسم
faulty-target. -
بعد الحصول على اسم الخادم المستهدَف، يمكنك استخدام إحدى الطريقتَين التاليتَين للتحقّق من إعدادات الخادم المستهدَف:
- واجهة مستخدم Edge
- واجهة برمجة تطبيقات الإدارة
واجهة مستخدم Edge
- انتقِل إلى Apigee Edge > المشرف > البيئات > الخوادم المستهدَفة.
- اختَر الخادم المستهدَف المحدّد من خادم وكيل واجهة برمجة التطبيقات وانقر على تعديل.
- تحقَّق من المنفذ المحدّد للخادم المستهدَف ومعلومات طبقة المقابس الآمنة.
-
إذا تم ضبط الخادم المستهدَف باستخدام منفذ آمن (مثلاً:
443)، ولكن لم يتم تفعيل طبقة المقابس الآمنة، فهذا هو سبب هذه المشكلة.
كما ترى في لقطة الشاشة أعلاه، المنفذ المستخدَم هو
443، ولكن لم يتم تفعيل طبقة المقابس الآمنة لهذا المنفذ في إعدادات الخادم المستهدَف. يؤدي ذلك إلى إرسال "معالج الرسائل" في Apigee Edge طلبات HTTP إلى المنفذ الآمن443. لذلك، يظهر لك الـ خطأ400 Bad Requestمع الرسالةThe plain HTTP request was sent to HTTPS port.
واجهة برمجة تطبيقات الإدارة
-
نفِّذ Get target server API للحصول على تفاصيل حول إعدادات الخادم المستهدَف المحدّد كما هو موضّح أدناه:
مستخدم السحابة الإلكترونية العامة:
curl -v 'https://api.enterprise.apigee.com/v1/organizations/ORG_NAME/environments/ENV_NAME>/targetservers/TARGET_SERVER_NAME' \ -H "Content-Type:application/xml" \ -H "Authorization:Bearer $TOKEN"
مستخدم السحابة الإلكترونية الخاصة:
curl -v 'http://MANAGEMENT_IP:8080/v1/organizations/ORG_NAME/environments/ENV_NAME/targetservers/TARGET_SERVER_NAME' \ -H "Content-Type:application/xml" \ -H "Authorization:Bearer $TOKEN"
- تحقَّق من المنفذ المحدّد للخادم المستهدَف ومعلومات طبقة المقابس الآمنة.
-
إذا تم ضبط الخادم المستهدَف باستخدام منفذ آمن (مثلاً:
443)، ولكن لم يتم تحديد قسمSSLInfoأو لم يتم تفعيله، فهذا هو سبب هذه المشكلة.مثال على إعدادات الخادم المستهدَف:
{ "host" : "somehost.org", "isEnabled" : true, "name" : "faulty-target", "port" : 443 }في نموذج الناتج أعلاه، يمكننا ملاحظة أنّ المنفذ المستخدَم للاتصال المستهدَف هو
443، ولكن لا يوجد قسم إعداداتSSLInfo.يؤدي ذلك إلى إرسال "معالج الرسائل" في Apigee Edge طلبات HTTP إلى المنفذ الآمن
443. لذلك، يظهر لك الخطأ400 Bad Requestمع الرسالةThe plain HTTP request was sent to HTTPS port.
الدقة
إذا كان الخادم المستهدَف آمنًا أو تم ضبطه لاستخدام بروتوكول أمان طبقة النقل (TLS)، عليك تفعيل طبقة المقابس الآمنة للخادم المستهدَف المحدّد.
يمكنك إجراء ذلك باستخدام أحد الخيارَين التاليَين:
- واجهة مستخدم Edge
- واجهة برمجة تطبيقات الإدارة
واجهة مستخدم Edge
- انتقِل إلى الخادم المستهدَف على واجهة مستخدم Edge > المشرف > البيئات > الخوادم المستهدَفة.
- اختَر الخادم المستهدَف المحدّد وانقر على تعديل.
- إذا كان الخادم المستهدَف آمنًا ويستخدم منفذًا مثل
443، فعِّل طبقة المقابس الآمنة من خلال وضع علامة في المربّع بجانب خيار طبقة المقابس الآمنة. - اضبط مخزن الثقة والرموز والبروتوكولات. (فقط إذا لزم الأمر)
واجهة برمجة تطبيقات الإدارة
استخدِم واجهة برمجة تطبيقات الإدارة لضبط الخادم المستهدَف كما هو موضّح في مستندات تعديل إعدادات الخادم المستهدَف.
معلومات التشخيص التي يجب جمعها
إذا استمرت المشكلة حتى بعد اتّباع التعليمات أعلاه، اجمع معلومات التشخيص التالية ثم تواصَل مع فريق دعم Apigee Edge.
- إذا كنت مستخدمًا للسحابة الإلكترونية العامة ، قدِّم المعلومات التالية:
- اسم المؤسسة
- اسم البيئة
- اسم خادم وكيل واجهة برمجة التطبيقات
- أمر curl الكامل لإعادة إنتاج الخطأ
- ناتج أداة "التتبُّع" (إذا تمكّنت من تسجيل الطلب الذي تعذّر تنفيذه)
- إذا كنت مستخدمًا للسحابة الإلكترونية الخاصة ، قدِّم المعلومات التالية:
- رسالة الخطأ الكاملة التي ظهرت
- اسم البيئة
- حزمة خادم وكيل واجهة برمجة التطبيقات
- تعريف الخادم المستهدَف (إذا كنت تستخدم خادمًا مستهدَفًا في نقطة النهاية)
- ناتج أداة "التتبُّع" (إذا تمكّنت من تسجيل الطلب الذي تعذّر تنفيذه)